如何在没有实际发送IGMP请求的情况下接收到击中NIC的组播数据包?

时间:2017-02-23 13:20:38

标签: linux sockets networking udp multicast

我有2台Ubuntu 16.04机器" A"和" B"在我的本地网络中。 " A"定期发送针对225.0.0.37的组播UDP报文。

在系统" B"我可以通过wireshark验证那些数据包是否正在击中我的NIC。我想编写一个C程序,它创建一个SOCK_DGRAM套接字并监听这些数据包而不在网络中发送IGMP加入数据包。如果我编写这样的程序,内核不允许这些数据包到达我的应用程序。它们在IP层3上进行过滤(我的猜测)。

有没有办法实现这个目标?我不希望任何IGMP数据包离开我的系统,但仍想捕获UDP流量。我知道的一个选项是使用SOCK_RAW,但我想仅从SOCK_DGRAM实现此目的。

我知道os在/proc/net/igmp/proc/net/dev_mcast中保留了igmp订阅条目。仅当我从程序的接口发送IP_ADD_MEMBERSHIP请求时才会创建这些条目。一旦程序终止,这些条目就会被清除。也许有办法愚弄内核来创建这个条目。

0 个答案:

没有答案