我正在尝试嗅探本地网络上的所有 IGMP 消息(出于不讨论的疯狂原因;-))。我有一些与此相关的问题,因为我并不是真正的 IGMP/路由专家。
甚至可能吗?我知道我可以从原始套接字读取 IGMP,并且我知道您可以使用 Wireshark 监视到达本地计算机的 IGMP 消息,但让我感到困惑的是:
我在另一台计算机上使用一个程序(通过开关与运行 Wireshark 的计算机分开),它将加入一个多播地址 - 但是 - 我并不总是在 Wireshark 中看到成员资格报告/加入。现在有谁知道是否可以保证每个IGMP 加入都分布在整个本地网络上?有时我在 Wireshark 中看到加入,有时我没有。
假设所有 IGMP 加入消息总是发送到网络上的每个站点,是否可以监视哪些站点是哪些多播组的成员,执行这样的操作(posix socket c++ 代码):
int rawSock = ::socket(AF_INET, SOCK_RAW, IPPROTO_IGMP);
uint8_t buf[10*1024];
while(true)
{
ssize_t rval = ::recv(rawSock, buf, sizeof(buf), 0);
iphdr *iph = (iphdr*)buf;
printf("Received %d bytes - protocol %d\n", rval, iph->protocol);
/*do whatever needed to the IGMP message*/
}