Sniffing mensajes IGMP en la red local

Estoy tratando de oler todos los mensajes IGMP en la red local (por razones locas que no se deben discutir ;-)). Tengo algunas preguntas relacionadas con esto, ya que no soy realmente un experto en IGMP / enrutamiento.

¿Es posible? Sé que puedo leer IGMP desde un socket en bruto, y sé que puedes usar Wireshark para monitorear los mensajes IGMP que llegan a tu computadora local, pero lo que me desconcierta es esto:

Uso un programa en otra computadora (separada de la que ejecuta Wireshark mediante un interruptor) que se unirá a una dirección de multidifusión, PERO no siempre veo el informe de Membresía / JOIN en Wireshark. Ahora, ¿alguien sabe si está garantizado quecad IGMP unirse se extiende en toda la red local? A veces veo la unión en Wireshark, a veces no.

Suponiendo que todos los mensajes de unión IGMP siempre se envían a todas las estaciones de la red, ¿no debería ser posible monitorear qué estaciones son miembros de qué grupos de multidifusión que hacen algo como esto (código pos ++ 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*/
} 

Respuestas a la pregunta(1)

Su respuesta a la pregunta