2011-06-13 66 views
3

我試圖在啓用了頭文件的原始套接字上讀取傳入數據包。查看其他項目,比如CodeProject上的MJsniffer,我已經能夠創建自己的代碼來閱讀我想要的一切。問題:我只是在檢索正在外出的信息。這裏是我的代碼來初始化一個原始套接字,加工代碼在這一點無關..使用IP協議中的原始套接字在C#中讀取傳入數據包

// Resolve the host name or IP address to am IPHostEntry instance 
IPHostEntry hIPHostEntry = Dns.GetHostEntry(Dns.GetHostName()); 

// Initialize a new instance of the Socket class. 
Socket hSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Unspecified); // IP is possible. 

// Bind the socket to each resolved IP address. 
foreach (IPAddress hIPAddress in hIPHostEntry.AddressList) try { hSocket.Bind(new IPEndPoint(hIPAddress, 0)); } catch(Exception) { continue; } 

// Configure the incoming socket to accept all the required information. 
hSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true); 

// Configure the incoming socket to receive all the required information. 
hSocket.IOControl(IOControlCode.ReceiveAll, BitConverter.GetBytes(1), BitConverter.GetBytes(1)); 

// Return the configured socket. 
return hSocket; 

運行在Windows 7 64位,我有充分的管理權限,我怎麼能修改此代碼以獲取套接字能夠讀取傳入的數據包?傳出很好,我也需要,但我絕對需要傳入數據包。

P.S:我不想強制用戶安裝WinPcap。我不想捕獲或欺騙或任何東西,只是閱讀,這應該是可能的。

回答

1

這可能不再幫助你,但對於其他人:

花太多時間我看着這之後,我本身,而不是通過Visual Studio運行可執行文件。傳入流量,令人驚歎!然後,我將VS調試.exe(MJSniff.vshost.exe)添加到我的防火牆允許的程序中,現在也可以使用。 (它總是簡單的事情...)

編輯:信貸也到這裏喬馬蒂奧尼一個答案: Unable to read incoming responses using raw sockets

+0

感謝分享!它現在對我特別沒有幫助,但是對於未來以及對於這個問題偶然發現的其他人來說,這是很好的知識。 – 2012-12-16 22:57:11

0

爲了調試的目的,你有沒有嘗試綁定到IPAddress.Any而不是?這樣,你將有一個綁定到所有本地接口。

此外,您是否使用Receive()ReceiveFrom(),它應該是ReceivedFrom()無連接套接字。

+0

謝謝您的回答。使用帶IPAddress.Any的原始套接字將引發異常,因爲這顯然是不允許的。我試過接收BeginReceiveFrom,而不是BeginReceive,但最終得到相同的結果。僅發現傳出數據包。任何額外的信息表示讚賞。 – 2011-06-13 19:32:08