gpt4 book ai didi

c# - 套接字仅捕获传出数据包,而不捕获传入数据包

转载 作者:可可西里 更新时间:2023-11-01 09:11:50 26 4
gpt4 key购买 nike

我在 this (frequently cited) sample project 上建立了一个数据包嗅探器.实现 HTTP 数据包后,我注意到我收到的唯一 HTTP 数据包是请求,我没有收到任何响应。

我看过许多不同的来源,但由于使用的代码通常是相同的,所以我倾向于认为它可能是我自己的本地代码。

当我查看我的日志时,我发现每个数据包都有我的本地 IP 作为 SourceIP,包括 HTTP 数据包和到达其他端口的数据包。

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

这导致在 192.168.0 范围内有成百上千个条目,总共有 3 个异常(exception)的 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());
}
  • Windows 8.1
  • Killer e2200 千兆以太网 Controller (NDIS 6.30) - 最新版本的驱动程序
    • 昨天安装了独立网卡,没有任何变化。

A post最接近我的问题的描述将我已有的工作代码作为解决方案。

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

最佳答案

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

关于c# - 套接字仅捕获传出数据包,而不捕获传入数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21972478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com