我基于数据包嗅探器这个(经常引用的)示例项目。实现 HTTP 数据包后,我注意到我收到的唯一 HTTP 数据包是请求,我没有收到任何响应。
我查看了许多不同的来源,但由于使用的代码通常是相同的,我倾向于认为它可能是我自己的本地代码。
当我查看日志时,我发现每个数据包都有我的本地 IPSourceIP
,对于 HTTP 数据包以及到达其他端口的数据包。
我已经提供了一个工作样本here您可以将其复制粘贴到 LINQPad 中,并应该演示问题(添加System.Net
and 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, 0, 0};
var byOut = new byte[] {1, 0, 0, 0};
_mainSocket.IOControl(IOControlCode.ReceiveAll, byTrue, byOut);
_mainSocket.EnableBroadcast = true;
_mainSocket.BeginReceive(_data, 0, _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, 0, _data.Length, SocketFlags.None, OnReceive, null);
}
private void Parse(byte[] data, int size)
{
var packet = new IPHeader(data, size);
Console.WriteLine (packet.SourceIP.ToString());
}
- 视窗8.1
-
Killer e2200 Gigabit Ethernet Controller (NDIS 6.30) - Latest version of driver
A post最接近我的问题的描述有我已经拥有的工作代码作为解决方案。
为什么我只能跟踪出站数据包?