Обнаружение IGMP-сообщений в локальной сети

Я пытаюсь прослушать все сообщения IGMP в локальной сети (по сумасшедшим причинам не обсуждаемые ;-)). У меня есть несколько вопросов, связанных с этим, так как я на самом деле не эксперт по IGMP / маршрутизации.

Это вообще возможно? Я знаю, что могу читать IGMP из необработанного сокета, и я знаю, что вы можете использовать Wireshark для мониторинга сообщений IGMP, которые поступают на ваш локальный компьютер, но меня удивляет следующее:

Я использую программу на другом компьютере (отделенном от того, на котором работает Wireshark с помощью коммутатора), который присоединяется к многоадресному адресу - НО - не всегда я даже вижу отчет о членстве / JOIN в 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*/
} 

Ответы на вопрос(1)

Ваш ответ на вопрос