TL; DR - Choisissez un:
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
Au début, j'allais dire "il suffit d'utiliser ip maddress add
et d'en finir". Le problème concerne ip maddress
uniquement les adresses de multidiffusion de couche liaison et non les adresses de multidiffusion de protocole ( man 8 ip-maddress
).
Cela étant dit, l'utilisation du autojoin
drapeau avec le verbe d' adresse fait très bien l'affaire.
Cela soulève cependant quelques questions subséquentes. Je suppose que vous serez en cours d'exécution tcpdump
ou tshark
que vous disposez des droits root. Dans le cas où vous ne le faites pas, le 22001 est un port à numéro élevé et d'autres utilitaires comme le socat
feront également.
Mais ne me croyez pas sur parole. Juste pour tester cela, nous pouvons générer des paquets UDP multicast avec socat
ou ncat
(généralement empaqueté via nmap
/ nmap-ncat
).
Sur un certain nombre d'hôtes, exécutez l' une des deux combinaisons suivantes:
Option 1:
sudo ip addr add 233.54.12.234/32 dev eth1 autojoin
Option 2:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 /dev/null &
La première option nécessitera soit root, soit au moins la capacité CAP_NET_ADMIN
. La deuxième option ne nécessite pas de racine, mais prévoit également de s'exécuter au premier plan et peut donc être moins propice à l'écriture de scripts (bien que le suivi de l'ID de processus enfant et le nettoyage avec un trap
dans BASH soit exactement ce que vous recherchez.
Une fois que cela est fait (mais avant de passer en test de notre commande tcpdump
/ tshark
), assurez-vous que le noyau reconnaît l'interface ayant rejoint le bon groupe IGMP. Si vous vous sentez super chic, vous pouvez devenir fou en analysant l'hexagone /proc/net/igmp
, mais je suggère de simplement courir netstat -gn
.
Une fois que vous avez vérifié que l'interface souscrite au bon groupe déclenche votre commande tcpdump:
tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234
Alternativement, si vous ne voulez pas suivre complètement la route de tcpdump (ou êtes tombé sur cette réponse et êtes simplement curieux de voir la multidiffusion en action), vous pouvez utiliser la socat
commande ci-dessus pour rejoindre et faire écho au contenu STDOUT
en remplaçant /dev/null
par STDOUT
:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1
Ensuite, à partir d'une autre machine, utilisez l'une des deux options suivantes pour envoyer des données de test simples:
Option 1:
socat STDIO UDP-DATAGRAM:233.54.12.234:22001
Option 2:
ncat -u 233.54.12.234 22001
Lorsque vous exécutez l'une de ces commandes, il attendra alors de manière interactive l'entrée. Tapez simplement certaines choses, appuyez sur Entrée pour envoyer, puis CTRL+D
lorsque vous avez terminé pour envoyer un EOF
message.
À ce stade, vous devriez avoir vu un test de bout en bout et avec quelques commandes, vous avez créé le pire système de chat le plus insécure au monde.
-p
drapeau, dans les versions standard de tcpdump, tourne le mode promiscuous off , car il est sur par défaut. En mode promiscuous, il devrait voir tout le trafic, y compris le trafic de multidiffusion, que l'abonnement soit établi ou non - sauf si vous êtes sur un réseau commuté et qu'il est nécessaire d'avoir l'abonnement établi pour que le commutateur vous fasse suivre le trafic.