【发布时间】:2011-12-15 12:21:50
【问题描述】:
我正在尝试嗅探本地网络上的所有 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*/
}
【问题讨论】:
标签: sockets routing ip multicast igmp