使用数据包套接字在同一网络接口上发送和接收时无法接收数据包

时间:2015-01-15 09:01:51

标签: c++ linux sockets networking

我已经创建了一个数据包套接字

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套接字根本没有捕获任何内容。

1 个答案:

答案 0 :(得分:0)

这似乎是对原始套接字的一些奇怪行为。请参阅stackoverflow上的相关故障单。