linux 如何在不发送IGMP请求的情况下接收到达NIC的组播数据包?

zdwk9cvp  于 12个月前  发布在  Linux
关注(0)|答案(1)|浏览(191)

我的本地网络中有两台Ubuntu 16.04机器“A”和“B”。“A”定期发送多播UDP数据包,目标是225.0.0.37。
在系统“B”上,我可以通过wireshark验证这些数据包是否命中我的NIC。我想写一个C程序,它创建一个SOCK_DGRAM套接字,并在网络中不发送IGMP加入数据包的情况下监听这些数据包。如果我写这样一个程序,内核不允许这些数据包到达我的应用程序。它们在IP层3上被过滤(我的猜测)。
我不想让任何IGMP数据包离开我的系统,但仍然想捕获UDP流量。我知道一个可行的选择是使用SOCK_RAW,但我只想从SOCK_DGRAM实现这一点。
我知道操作系统在/proc/net/igmp/proc/net/dev_mcast中保存了igmp订阅条目。只有当我从程序的接口发送IP_ADD_MEMBERSHIP请求时,这些条目才会被创建。一旦程序终止,这些条目就会被清除。也许有一种方法可以欺骗内核来创建这个条目。

kcwpcxri

kcwpcxri1#

你可以尝试两件事:
1.只需将接口切换到混杂模式,如下所示:ip link set en123 promisc on,或
1.继续设置IP_ADD_MEMBERSHIP,但添加一个netfilter规则,以丢弃实际离开主机的IGMP数据包。
通常,IGMP数据包离开您的系统不应该是一个问题。
所以,我很好奇你为什么有这个特殊的要求。

相关问题