2010-10-25 129 views
1

在下面的代码数据包嗅探器插座例外

 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); 

但我不明白为什么我有提供了一个错误的观点

+0

您声称发生错误的行在所提供的代码中不存在。我认为需要一个mod来使其工作,因为'out'是保留的。请更新您的问题。 – spender 2010-10-25 09:24:18

+0

TY,我已经编辑它。 – 2010-10-25 09:25:22

+0

它是否用变量名'out'编译?如果是这样,我很惊讶,因为它是一个保留的关键字。 http://msdn.microsoft.com/en-us/library/x53a06bb%28VS.71%29.aspx – spender 2010-10-25 09:27:17

回答

2

好的,我找到了。

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

该死的,总是那么容易。

1

MSDN articleIOControl DOC,专门为.ReceiveAll:

启用接收关于 网络的所有IPv4报文。该套接字必须具有 地址族InterNetwork,套接字类型必须为 ,并且 协议类型必须为IP。当前的 用户必须属于本地计算机上的Administrators 组,并且必须将 套接字绑定到特定的 端口。此控制代码在Windows 2000上受支持 ,并在以后运行 系统。该值等于 Winsock 2 SIO_RCVALL constant.Winsock 2 SIO_RCVALL常量。

是否有可能您不在管理员组中,或者您绑定了不正确的端口?好像你正确设置了其他选项。尽管如此,您的代码看起来与this example完全相同,所以它应该可以工作?你能否进一步深入研究异常情况以了解更详细的内部异常情况?

+0

Heya,我很确定我在一个管理员组里。我甚至添加了以下清单: 而且没有更多的内部异常。我也在管理员中运行VS – 2010-10-25 13:05:13