2010-10-25 159 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