【发布时间】: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 隧道)发送数据包以强制处理数据包,就好像它们来自路由器一样,是否需要任何套接字标志?
【问题讨论】: