TL; DR - Elija uno:
sudo ip addr add 233.54.12.234/32 dev eth1 autojoin
socat STDIO UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 > /dev/null
Al principio iba a decir "solo utilízalo ip maddress add
y listo". El problema ip maddress
solo afecta a las direcciones de multidifusión de capa de enlace, no a las direcciones de multidifusión de protocolo ( man 8 ip-maddress
).
Dicho esto, el uso de la autojoin
bandera con el verbo de dirección funciona muy bien.
Sin embargo, esto plantea algunas preguntas posteriores. Supongo que ya se ejecutará tcpdump
o tshark
que tiene permiso de root. En el caso de que no lo haga, 22001 es un puerto con un número alto y otras utilidades como socat
también harán las cosas.
Sin embargo, no confíes en mi palabra. Solo para probar esto podemos generar paquetes UDP multicast con socat
o ncat
(generalmente empaquetados a través de nmap
/ nmap-ncat
).
En algunos hosts, ejecute una de las siguientes dos combinaciones:
Opción 1:
sudo ip addr add 233.54.12.234/32 dev eth1 autojoin
Opcion 2:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 /dev/null &
La primera opción requerirá root, o al menos la capacidad CAP_NET_ADMIN
. La segunda opción no requiere root, pero también espera ejecutarse en primer plano y, por lo tanto, puede ser menos propicio para las secuencias de comandos (aunque rastrear la ID del proceso secundario y limpiarlo con trap
BASH puede ser justo lo que está buscando).
Una vez hecho esto (pero antes de volvernos locos probando nuestro tcpdump
/ tshark
comando) asegúrese de que el kernel reconozca que la interfaz se ha unido al grupo IGMP correcto. Si te sientes súper elegante, puedes volverte loco analizando el hechizo /proc/net/igmp
, pero te sugiero que solo corras netstat -gn
.
Una vez que haya verificado que ve la interfaz suscrita al grupo correcto, inicie su comando tcpdump:
tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234
Alternativamente, si no desea seguir completamente la ruta de tcpdump (o tropezó con esta respuesta y siente curiosidad por ver la multidifusión en acción), puede usar el socat
comando anterior para unirse y hacer eco del contenido STDOUT
reemplazándolo /dev/null
con STDOUT
:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1
Luego, desde otra máquina, use una de las siguientes dos opciones para enviar algunos datos de prueba simples:
Opción 1:
socat STDIO UDP-DATAGRAM:233.54.12.234:22001
Opcion 2:
ncat -u 233.54.12.234 22001
Cuando ejecuta cualquiera de esos comandos, esperará interactivamente la entrada. Simplemente escriba algunas cosas, presione enter para enviar, luego CTRL+D
cuando haya terminado de enviar un EOF
mensaje.
En este punto, debería haber visto una prueba de extremo a extremo y con unos pocos comandos creó el peor sistema de chat más inseguro del mundo.
-p
bandera, en versiones estándar de tcpdump, resulta modo promiscuo fuera , ya que es el por defecto. En el modo promiscuo, debería ver todo el tráfico, incluido el tráfico de multidifusión, independientemente de si tiene la suscripción establecida, a menos que esté en una red conmutada y es necesario tener la suscripción establecida para que el conmutador le envíe el tráfico.