我正在尝试读取已启用标头的原始套接字上的传入数据包。看看其他项目,比如CodeProject上的MJsniffer,我已经能够创建自己的代码来读取我想要的所有内容。问题:我只检索OUTGOING的信息。这是我的初始化原始套接字的代码,此时处理代码无关紧要..
// 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。我不想捕获或欺骗或任何东西,只需阅读,这应该是可能的..
答案 0 :(得分:1)
这可能不再对你有所帮助,但对其他任何人都有帮助:
在花了太多时间自己看这个之后,我自己运行了可执行文件,而不是通过Visual Studio。来港交通,太神奇了!然后我将VS debug .exe(MJSniff.vshost.exe)添加到我的防火墙中允许的程序中,现在也可以使用。 (这总是很简单的事情......)
编辑:还记得Joe Mattioni的回答: Unable to read incoming responses using raw sockets
答案 1 :(得分:0)
出于调试目的,您是否尝试过绑定到IPAddress.Any
?这样,您将只有一个绑定到所有本地接口。
此外,您使用的是Receive()
还是ReceiveFrom()
,无连接套接字应为ReceivedFrom()
。