【问题标题】:Windows Host OS appears to ignore injected packets via linux sendto using raw socketWindows 主机操作系统似乎忽略了通过 linux sendto 使用原始套接字注入的数据包
【发布时间】:2021-09-07 12:03:53
【问题描述】:

我正在使用 Linux sendto() 函数和 RAW 套接字 (socket(AF_INET, SOCK_RAW, IPPROTO_RAW);) 将数据包发送到 Windows 网卡 (eth1)。然而,虽然数据包的地址是网卡的 IP 地址,但主机操作系统似乎“忽略”了这些数据包。

例如,网卡的 IP 为 192.168.1.2,我的用户空间应用程序发送一个网络数据包,其中包含地址为 192.168.1.2 的 ping。我可以在 Wireshark 中观察到 ping 到达 192.168.1.2 的网络设备,但是没有生成回复。 ping 上的 TTL 不为零,所以我不知道为什么主机操作系统会“忽略”发往它的数据包。

同样,如果我创建一个 UDP 套接字并将其绑定到 5050 端口上的 192.168.1.2 侦听,然后在 5050 端口上发送一个寻址到 192.168.1.2 的用户空间 UDP 数据包,则该数据包永远不会传递到该端口。

什么会导致接收它的网卡忽略一个数据包?

如果我从用户空间(通过自定义 IP 隧道)发送数据包以强制处理数据包,就好像它们来自路由器一样,是否需要任何套接字标志?

【问题讨论】:

    标签: networking raw-sockets


    【解决方案1】:

    问题原来是本机 Windows 防火墙,禁用防火墙解决了这个问题。

    此外,如果在网络设备上重新发布网络数据包,如果单个设备(mac addr)正在发布来自不同源 ip 的多个 ip 数据包,windows 可能会过滤掉数据包,假设 macip 是唯一的1:1 映射。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多