这个没做过 MARK 等高人回复

解决方案 »

  1.   

    监听MAC地址??如果是多网卡的话,感觉还是先找到对应MAC地址的IP地址,监听这个IP地址吧!
      

  2.   

    试试fastCSharpusing System;
    using fastCSharp;namespace fastCSharp.demo.rawSocketListener
    {
        class Program
        {
            /// <summary>
            /// 原始套接字监听
            /// </summary>
            /// <param name="args"></param>
            static void Main(string[] args)
            {
                using (fastCSharp.net.rawSocketListener rawSocket = new fastCSharp.net.rawSocketListener(getPacket, System.Net.IPAddress.Parse("192.168.1.100")))
                {
                    Console.ReadKey();
                }
            }
            /// <summary>
            /// 数据包处理
            /// </summary>
            /// <param name="data">数据包</param>
            private static void getPacket(subArray<byte> data)
            {
                fastCSharp.net.packet.ip ip4 = new fastCSharp.net.packet.ip(data);
                if (ip4.IsPacket)
                {
                    switch (ip4.Protocol)
                    {
                        case fastCSharp.net.packet.ip.protocol.Icmp:
                            fastCSharp.net.packet.icmp icmp = new fastCSharp.net.packet.icmp(ip4.Packet);
                            if (icmp.IsPacket)
                            {
                                Console.WriteLine(ip4.Source.toHex8() + " -> " + ip4.Destination.toHex8() + " " + ip4.Protocol.ToString() + " " + icmp.Type.ToString() + " " + icmp.Code.ToString());
                            }
                            else Console.WriteLine("Unknown");
                            break;
                        case fastCSharp.net.packet.ip.protocol.Igmp:
                            fastCSharp.net.packet.igmp igmp = new fastCSharp.net.packet.igmp(ip4.Packet);
                            if (igmp.IsPacket)
                            {
                                Console.WriteLine(ip4.Source.toHex8() + " -> " + ip4.Destination.toHex8() + " " + ip4.Protocol.ToString());
                            }
                            else Console.WriteLine("Unknown");
                            break;
                        case fastCSharp.net.packet.ip.protocol.Tcp:
                            fastCSharp.net.packet.tcp tcp = new fastCSharp.net.packet.tcp(ip4.Packet);
                            if (tcp.IsPacket)
                            {
                                Console.WriteLine(ip4.Source.toHex8() + ":" + ((ushort)tcp.SourcePort).toHex() + " -> " + ip4.Destination.toHex8() + ":" + ((ushort)tcp.DestinationPort).toHex() + " " + ip4.Protocol.ToString());
                            }
                            else Console.WriteLine("Unknown");
                            break;
                        case fastCSharp.net.packet.ip.protocol.Udp:
                            fastCSharp.net.packet.udp udp = new fastCSharp.net.packet.udp(ip4.Packet);
                            if (udp.IsPacket)
                            {
                                Console.WriteLine(ip4.Source.toHex8() + ":" + ((ushort)udp.SourcePort).toHex() + " -> " + ip4.Destination.toHex8() + ":" + ((ushort)udp.DestinationPort).toHex() + " " + ip4.Protocol.ToString());
                            }
                            else Console.WriteLine("Unknown");
                            break;
                        default:
                            Console.WriteLine(ip4.Source.toHex8() + " -> " + ip4.Destination.toHex8() + " " + ip4.Protocol.ToString());
                            break;
                    }
                }
                else Console.WriteLine("Unknown");
            }
        }
    }