2011-06-13 11 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

相关问题