sockets - comandos - Detectando mensajes IGMP en la red local
clusvcadm (1)
Intento olfatear todos los mensajes IGMP en la red local (por motivos descabellados no se discutirán ;-)). Tengo algunas preguntas relacionadas con esto, ya que no soy realmente un experto en enrutamiento IGMP.
¿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 (separado del que ejecuta Wireshark mediante un conmutador) 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 se garantiza que cada reunión IGMP se distribuya en toda la red local? A veces veo la unión en Wireshark, otras veces no.
Asumiendo que todos los mensajes de unión IGMP siempre se envían a cada estación en la red, ¿no debería ser posible monitorear qué estaciones son miembros de qué grupos de multidifusión están haciendo algo como esto (posix socket c ++ code):
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*/
}
Su problema podría ser este ... Cada paquete IGMP debe tener un IP TTL = 1, lo que significa que IGMP nunca cruzará un límite enrutado (como un vlan).
De RFC 2236 - IGMP versión 2 :
Like ICMP, IGMP is a integral part of IP. It is required to be
implemented by all hosts wishing to receive IP multicasts. IGMP
messages are encapsulated in IP datagrams, with an IP protocol number
of 2. All IGMP messages described in this document are sent with IP
TTL 1, and contain the IP Router Alert option [RFC 2113] in their IP
header.
Esto significa que no puedes estar en ningún lado y ver IGMP; debe verificar que su receptor IGMP anterior esté en la misma subred IP que el remitente . También puede verificar si su máquina está recibiendo IGMP con tshark
o wireshark
...