gpt4 book ai didi

Linux recvfrom() 无法接收 Wireshark 可以看到的流量

转载 作者:行者123 更新时间:2023-12-04 14:01:37 27 4
gpt4 key购买 nike

我正在使用一块硬件来生成打包在 UDP 数据包中的数据流。它们通过专用的 40Gb 以太网链路发送到另一台接收器硬件。不涉及集线器或交换机,只有一个发送器和一个接收器。
我们最近断开了接收器硬件的连接,并将其插入商用 Linux 工作站,以便通过软件接收数据流。我可以启动发送器硬件,并且在接收工作站上运行 Wireshark 时,我可以准确地看到我应该看到的数据。但是,如果我在执行 UDP recvfrom() 的接收器上启动一个单独的应用程序,它看不到 Wireshark 可以看到的 UDP 数据包,它只会收到 recvfrom() 超时。我绑定(bind)到 Wireshark 报告为数据包目的地的完全相同的 IP 地址和端口。 IP地址是192.168私有(private)子网,端口在4000,所以是“保留”而不是“知名”。将 IP 地址设置为 INADDR_ANY 没有任何区别。当我尝试进行 UDP 接收时,是否运行 Wireshark 没有任何区别。
如果发件人是另一个软件应用程序(诚然发送到工作站上的某个其他 NIC),则尝试接收的软件可以正常工作。我检查每个调用的返回状态(socket()、setsockopt()、bind()、recvfrom()),它们都声称成功。
接收数据的 NIC 是设置为 40Gb 以太网模式的 Mellanox ConnectX-4(我相信)。 MTU 设置为 9000,尽管数据流中的数据包要小得多(100-200 字节)。
什么条件会使数据包流对 Wireshark 可见但对其他应用程序软件不可见?可能是 NIC 设置不正确吗?以太网/IP/UDP header 中是否可能存在有问题且未将其添加到堆栈中的标志?我接下来应该看哪里?

最佳答案

正如上面的评论中所指出的,根本问题是发送硬件使用的目标 MAC 地址不是接收 NIC 的目标 MAC 地址。事实证明,它以及 IP 地址都在发送硬件中进行了硬编码。并且硬件无法使用 ARP 来解析。发现这一点涉及用 Wireshark 报告的内容交叉检查“ip addr show”的输出。幸运的是,可以编写一个新的 MAC 地址供发送者使用。如果有的话,这里的教训是什么都不假设,检查一切。

关于Linux recvfrom() 无法接收 Wireshark 可以看到的流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69834308/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com