c#捕获http数据包只能捕获本机应答的,无法捕获发给本机信息的
问题如题,核心代码如下:
addr = (IPAddress)ComboBoxInterface.SelectedItem;//此处为选择本机IP地址
// m_sniffingIPAddress = addr;
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, 0);//地址族,套接字类型,协议初始化
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
s.Bind(new IPEndPoint(addr, 0));//与本地指定IP绑定,端口不限
m_socket = s;
byte[] inctrl = { 1, 0, 0, 0 };
byte[] outctrl = { 0, 0, 0, 0 };
int ret = m_socket.IOControl(IOControlCode.ReceiveAll, inctrl, outctrl);
if (ret != 0)
{
MessageBox.Show("IOControl 失败");
stopbubao();
}
s.BeginReceive(m_buffer, 0, m_buffer.Length, 0, new AsyncCallback(OnPacket), null);
。。。。。。。
delegate void OnPacketCallback(IAsyncResult ars);
private void OnPacketSync(IAsyncResult ars)
{
if (m_socket == null) return;
Socket s = m_socket;
int nbytes = s.EndReceive(ars);
Char[] middleResult = new Char[65535];
if (nbytes > 0)
{
IPHeader ipHdr = new IPHeader(m_buffer, nbytes);
TCPHeader tcpHdr = null;
UDPHeader udpHdr = null;
if (ipHdr.Protocol == ProtocolType.Tcp)
{
tcpHdr = new TCPHeader(ipHdr.Data, ipHdr.MessageLength);
if (tcpHdr.DestinationPort == 80)
{
richTextBox1.AppendText("HTTP!!!");
byte[] raw=tcpHdr.Data;
fileseq++;
}
运行结果是捕获的数据包中没有使用本机80端口的http数据包,而又使用远程客户端的80端口的应答数据包,很奇怪的问题,求解 ●︿●,感激不尽!