【发布时间】: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 发送的。
我在某处读到任何网络设备都会简单地忽略这样的数据包,但我仍然在环回接口上看到这种行为(为什么在这种情况下它不环回?)。
我只控制发件人,由于性能原因,这是要走的路。但是,其中一个收件人可能位于同一台计算机上,在这种情况下,将使用 lo 或 eth0(取决于配置)。
如何强制接口不忽略这些数据包?
编辑: 使用原始数据包套接字套接字进行接收表明我确实得到了传出(PACKET_OUTGOING)和传入(PACKET_HOST)。但是,使用更“常规”的 UDP 套接字进行接收根本不会捕获任何东西。
【问题讨论】:
标签: c++ linux sockets networking