Sniffing mensagens IGMP na rede local

Estou tentando cheirar todas as mensagens IGMP na rede local (por motivos malucos que não devem ser discutidos ;-)). Tenho algumas perguntas relacionadas a isso, pois não sou realmente um especialista em IGMP / roteament

Isso é possível? Sei que posso ler IGMP de um soquete bruto e sei que você pode usar o Wireshark para monitorar as mensagens IGMP que chegam ao computador local, mas o que me intriga é isso:

Uso um programa em outro computador (separado do que está executando o Wireshark por um comutador) que ingressa em um endereço multicast - MAS - nem sempre é que eu vejo o relatório de associação / JOIN no Wireshark. Agora, alguém sabe se é garantido quecad A junção IGMP está espalhada por toda a rede local? Às vezes, vejo a junção no Wireshark, às vezes nã

Supondo que todas as mensagens de junção IGMP sejam sempre enviadas para todas as estações da rede, não será possível monitorar quais estações são membros de quais grupos multicast fazendo algo parecido com isto (código posix soquete 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*/
} 

questionAnswers(1)

yourAnswerToTheQuestion