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

前端之家收集整理的这篇文章主要介绍了c# – 套接字只捕获输出数据包,而不是传入数据包前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 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最接近我的问题的描述已经解决了我已经有的工作代码.

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

解决方法

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

猜你在找的C#相关文章