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

Posted

技术标签:

【中文标题】使用数据包套接字在同一网络接口上发送和接收时无法接收包【英文标题】:Cannot receive packet when sending and receving on same network interface using packet socket 【发布时间】:2015-01-15 09:01:51 【问题描述】:

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

m_socket = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

并附加了一个 TX 环形缓冲区。我正确填写了以太网、ip 和 udp 标头,并且在源 MAC 和目标 MAC 恰好相等之前一切正常。然后 netcat(或任何其他实用程序/udp 接收器)无法接收我发送的数据包。数据包是根据 tcpdump 发送的。

我在某处读到任何网络设备都会简单地忽略这样的数据包,但我仍然在环回接口上看到这种行为(为什么在这种情况下它不环回?)。

我只控制发件人,由于性能原因,这是要走的路。但是,其中一个收件人可能位于同一台计算机上,在这种情况下,将使用 loeth0(取决于配置)。

如何强制接口不忽略这些数据包?

编辑: 使用原始数据包套接字套接字进行接收表明我确实得到了传出(PACKET_OUTGOING)和传入(PACKET_HOST)。但是,使用更“常规”的 UDP 套接字进行接收根本不会捕获任何东西。

【问题讨论】:

【参考方案1】:

这似乎是原始套接字的一些奇怪行为。请在*** 上查看此相关票证。

【讨论】:

以上是关于使用数据包套接字在同一网络接口上发送和接收时无法接收包的主要内容,如果未能解决你的问题,请参考以下文章

在 ICMP 套接字上接收数据

网络UDP

在一个应用程序中发送和接收 UDP 数据包

从不同线程在同一个套接字上发送和接收不起作用

网络 -- TCP流量控制拥塞控制

网络 -- TCP流量控制拥塞控制