我正在使用Linux sendto()函数和原始套接字(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隧道)发送数据包以强制处理数据包,是否需要任何套接字标志,就像它们来自路由器一样?
发布于 2021-06-25 01:33:19
问题原来是本机windows防火墙,禁用防火墙解决了这个问题。
此外,如果在网络设备上重新发布网络分组,如果单个设备(mac地址)正在发布来自不同源ip的多个ip分组,则windows可以在假定mac ip是唯一的1:1映射的情况下过滤出分组。
https://stackoverflow.com/questions/68108201
复制相似问题