我已经创建了一个数据包套接字
m_socket = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
并附加一个TX环缓冲区。我正确地填写了以太网,ip和udp标头,并且在源和目标MAC恰好相同之前,情况会很好。然后netcat(或任何其他实用程序/ udp接收器)无法接收我发送的数据包。然而,数据包是根据tcpdump发送的。
我在某处读到任何网络设备只会忽略这样的数据包,但我仍然在环回接口上看到这种行为(为什么在这种情况下它不会循环回来?)。
我只控制发件人,由于性能原因,这是要走的路。但是,其中一个收件人可能位于同一台计算机上,在这种情况下,将使用 lo 或 eth0 (取决于配置)。
如何强制接口不忽略这些数据包?
修改: 使用原始数据包套接字套接字显示我确实得到传出(PACKET_OUTGOING)和incomming(PACKET_HOST)。但是,使用更常规的'用于接收的UDP套接字根本没有捕获任何内容。