【问题标题】: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 套接字进行接收根本不会捕获任何东西。

【问题讨论】:

    标签: c++ linux sockets networking


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-07-04
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 2013-11-19
      • 1970-01-01
      相关资源
      最近更新 更多