加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 套接字只捕获输出数据包,而不是传入数据包

发布时间:2020-12-15 03:42:52 所属栏目:百科 来源:网络整理
导读:我在 this (frequently cited) sample project上基于一个数据包嗅探器.在实现HTTP数据包之后,我注意到我唯一收到的HTTP数据包是请求,我没有收到任何响应. 我看了很多不同的来源,但由于使用的代码是非常常见的,所以我倾向于认为这可能是本地的. 当我查看我的
我在 this (frequently cited) sample project上基于一个数据包嗅探器.在实现HTTP数据包之后,我注意到我唯一收到的HTTP数据包是请求,我没有收到任何响应.

我看了很多不同的来源,但由于使用的代码是非常常见的,所以我倾向于认为这可能是本地的.

当我查看我的日志时,我看到每个数据包都有本地IP作为SourceIP,用于HTTP数据包以及到达其他端口的数据包.

我提供了一个工作示例here,您可以将其复制粘贴到LINQPad中,并显示问题(添加System.Net和System.Net.Socket程序集).不要忘记以管理员身份执行LINQPad来访问套接字.

这导致在192.168.0范围内的数百个/数千个条目,共有3个IP地址异常引用了我的主机提供商(使用nslookup检查).

private readonly byte[] _data = new byte[4096];   
private Socket _mainSocket;

public void Capture()
{
    _mainSocket = new Socket(AddressFamily.InterNetwork,SocketType.Raw,ProtocolType.IP);
    _mainSocket.Bind(new IPEndPoint(GetLocalIP(),0));

    var byTrue = new byte[] {1,0};
    var byOut = new byte[] {1,0};

    _mainSocket.IOControl(IOControlCode.ReceiveAll,byTrue,byOut); 

    _mainSocket.EnableBroadcast = true;
    _mainSocket.BeginReceive(_data,_data.Length,SocketFlags.None,OnReceive,null);
}

private void OnReceive(IAsyncResult ar)
{
    SocketError error;
    var received = _mainSocket.EndReceive(ar,out error);
    Parse(_data,received);
    _mainSocket.BeginReceive(_data,null);
}

private void Parse(byte[] data,int size)
{
     var packet = new IPHeader(data,size);
     Console.WriteLine (packet.SourceIP.ToString());
}

> Windows 8.1
> Killer e2200千兆以太网控制器(NDIS 6.30) – 最新版本的驱动程序

>昨天安装了一个独立的网卡,没有任何改变.

A post最接近我的问题的描述已经解决了我已经有的工作代码.

为什么我只能跟踪出站数据包?

解决方法

您是否尝试查看您的操作系统/独立/路由器防火墙? 经常被忽视,但防火墙对传入和传出连接有不同的规则,这可能是您的问题的原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读