c#捕获http数据包只能捕获本机应答的,无法捕获发给本机信息的

yumeng199010 2012-11-13 07:24:24
问题如题,核心代码如下:
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端口的应答数据包,很奇怪的问题,求解 ●︿●,感激不尽!
...全文
145 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

1,979

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧