数据包嗅探器套接字异常

时间:2010-10-25 09:19:05

标签: c# .net sockets sniffer

在以下代码

        Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
        s.Bind(new System.Net.IPEndPoint(IPAddress.Parse("127.0.0.1"),0));
        s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
        byte[] bin = new byte[4]{1, 0, 0, 0};
        byte[] bout = new byte[4];
        s.IOControl(IOControlCode.ReceiveAll, bin, bout);

我得到以下异常:

Socket Exception: An invalid argument was supplied

在以下一行

        s.IOControl(IOControlCode.ReceiveAll, in, out);

但我不明白为什么我提供了错误的论据。

2 个答案:

答案 0 :(得分:2)

好的,我找到了。

127.0.0.1不是适当的IP地址注释。我必须使用我当地的(192.168.0.100);

Darn,它总是那么容易。

答案 1 :(得分:1)

请参阅MSDN articleIOControl文档,特别是.ReceiveAll:

  

启用接收所有IPv4数据包   网络。套接字必须有   地址系列InterNetwork,   socket类型必须是Raw,而且   协议类型必须是IP。目前   用户必须属于管理员   本地计算机上的组,以及   socket必须绑定到特定的   港口。支持此控制代码   在Windows 2000及更高版本上运行   系统。这个值等于   Winsock 2 SIO_RCVALL constant.Winsock 2 SIO_RCVALL常量。

您是否可能不在管理员组中,或者您绑定了错误的端口?您似乎正确设置了其他选项。虽然,尽管如此,您的代码看起来与this example相同,所以它应该有效吗?您是否可以深入研究异常以阅读可能更详细的内部异常?