TL; DR - Wählen Sie eine aus:
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
Zuerst wollte ich sagen "benutze es einfach ip maddress add
und sei fertig damit". Das Problem ip maddress
betrifft nur Multicast-Adressen der Verbindungsschicht, keine Protokoll- Multicast-Adressen ( man 8 ip-maddress
).
Davon abgesehen macht die Verwendung der autojoin
Flagge mit dem Adressverb den Trick einfach gut.
Dies wirft jedoch einige nachfolgende Fragen auf. Ich gehe davon aus, dass Sie ausgeführt werden tcpdump
oder tshark
über Root-Berechtigungen verfügen. Für den Fall, dass Sie nicht 22001 ist ein Port mit hoher Nummer und andere Dienstprogramme wie socat
werden auch Dinge erledigen.
Nimm mein Wort nicht dafür. Um dies zu testen, können wir Multicast-UDP-Pakete mit socat
oder ncat
(im Allgemeinen über nmap
/ gepackt nmap-ncat
) generieren .
Führen Sie auf einigen Hosts eine der folgenden zwei Kombinationen aus:
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 &
Die erste Option erfordert entweder root oder zumindest die Fähigkeit CAP_NET_ADMIN
. Die zweite Option erfordert kein root, erwartet jedoch auch, dass sie im Vordergrund ausgeführt wird, und ist daher möglicherweise weniger förderlich für die Skripterstellung (obwohl das Verfolgen der trap
untergeordneten Prozess-ID und das Bereinigen mit einem in BASH möglicherweise genau das ist, wonach Sie suchen.
Sobald dies erledigt ist (aber bevor wir unseren tcpdump
/ tshark
Befehl testen ), stellen Sie sicher, dass der Kernel die Schnittstelle erkennt, die der richtigen IGMP-Gruppe beigetreten ist. Wenn du dich super schick fühlst, kannst du verrückt werden, wenn du das Hex auswählst /proc/net/igmp
, aber ich würde vorschlagen, einfach nur zu rennen netstat -gn
.
Sobald Sie überprüft haben, dass die Schnittstelle die richtige Gruppe abonniert hat, starten Sie Ihren Befehl tcpdump:
tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234
Alternativ können Sie den socat
obigen Befehl verwenden, um den Inhalt zu verbinden und zu wiederholen, STDOUT
indem Sie ihn ersetzen /dev/null
durch STDOUT
:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1
Verwenden Sie dann von einem anderen Computer aus eine der folgenden beiden Optionen, um einige einfache Testdaten zu senden:
Option 1:
socat STDIO UDP-DATAGRAM:233.54.12.234:22001
Option 2:
ncat -u 233.54.12.234 22001
Wenn Sie einen dieser Befehle ausführen, wartet er interaktiv auf die Eingabe. Geben Sie einfach einige Dinge ein, drücken Sie die Eingabetaste, um zu senden, und CTRL+D
wenn Sie fertig sind, senden Sie eine EOF
Nachricht.
Zu diesem Zeitpunkt sollten Sie einen End-to-End-Test gesehen und mit ein paar Befehlen das schlechteste und unsicherste Chat-System der Welt aufgebaut haben.
-p
Flagge, in Standardversionen von tcpdump, schaltet Promiscuous - Modus aus , wie es auf der Standardeinstellung. Im Promiscuous-Modus sollte der gesamte Datenverkehr einschließlich des Multicast-Datenverkehrs angezeigt werden, unabhängig davon, ob Sie das Abonnement eingerichtet haben - es sei denn, Sie befinden sich in einem Switched-Netzwerk und das Abonnement muss eingerichtet sein, damit der Switch Ihnen den Datenverkehr weiterleitet.