Integriertes Linux- oder Open-Source-Programm zum Beitritt zur Multicast-Gruppe?

29616
chriskirk

Ich verwende tcpdump zum Erfassen von Multicast-Paketen. Ich musste ein benutzerdefiniertes Programm programmieren, um Multicast-Feeds beizutreten, sodass "tcpdump" die Pakete "sieht". Frage mich nur, ob netcat oder andere Anwendungen diese Funktion stattdessen ausführen können?

7

4 Antworten auf die Frage

10
grawity

Sie können dies mit dem ip maddr addBefehl tun .


SYNTAX

ip maddr [ add | del ] MULTIADDR dev STRING 

BESCHREIBUNG

Es fügt eine statische Link-Layer-Multicast-Adresse hinzu, um die Schnittstelle abzuhören. Beachten Sie, dass es nicht möglich ist, Protokoll-Multicast-Gruppen statisch zu verbinden. Dieser Befehl verwaltet nur Link-Layer-Adressen.

address LLADDRESS (default) the link layer multicast address.  dev NAME the device to join/leave this multicast address.  

BEISPIELE

Beispiel für eine Kabelverbindung:

ip maddr add ff02::fb dev eth0 

Beispiel für eine drahtlose Verbindung:

ip maddr add 224.0.0.251 dev wlan0 
Wenn Sie dies auf einem Ubuntu 14.04-Box ausführen, wird folgende Fehlermeldung angezeigt: `" ff02 "ist ungültig. Fehler: "ff02" ist keine gültige Adresse. " Nathan Osman vor 9 Jahren 0
Nach mehr Durchsuchen scheint es, dass "ip maddr" nur mit _link-layer_-Multicast-Adressen und nicht mit _protocol-layer_-Multicast-Adressen funktioniert. Nathan Osman vor 9 Jahren 3
@ NathanOsman- Haben Sie jemals einen Weg gefunden, Protokoll-Layer-Multicast-Adressen zu abonnieren? kit vor 7 Jahren 0
Leider beantwortet diese Antwort die Frage nicht, da sie nur für ** Link-Layer **, dh MAC-Adressen, funktioniert. Das IPv6-Beispiel schlägt fehl, wie im ersten Kommentar erwähnt, und das IPv4-Beispiel schlägt fehl, aber leise (dh die Gruppe wird weder mit ip maddr show verbunden noch aufgelistet.) Pierz vor 6 Jahren 0
8
NeilenMarais

Mit socat können Sie Gruppen abonnieren. Dies funktioniert gut für L2- und L3-Abonnements:

socat STDIO UDP4-DATAGRAM:239.101.1.68:8889,\ ip-add-membership=239.0.1.68:10.100.201.1 

Dadurch wird eine Gruppe 239.0.1.68über die Schnittstelle mit Adresse abonniert 10.100.201.1. Das UDP4-DATAGRAM:239.101.1.68:8889Bit wartet auf Pakete in einer Dummy-Gruppe und einem UDP-Port, die keine Daten erhalten sollen, um zu verhindern, dass socat auch alles an stdout ausgibt. Wenn Sie stattdessen die Nutzdaten an stdout weiterleiten möchten, ändern Sie diese Gruppe und diesen Port in tatsächliche Gruppe und Port, die Sie abonnieren möchten.

Mehrere durch Kommas getrennte ip-add-membershipDirektiven können angegeben werden, um mehrere Gruppen gleichzeitig zu abonnieren. Wenn socat beendet wird, scheint es auch die IGMP-Abonnements zu löschen.

0
SergA

Neben der socatAntwort gibt es hier eine Schwergewichtslösung - smcroute . Diese Anwendung läuft als Daemon und kann im laufenden Betrieb gesteuert werden:

smcroutectl join eth0 239.1.1.27 smcroutectl leave eth0 239.1.1.27 
0
Siegfried

Verwenden Sie den Teil "Receive" in https://stackoverflow.com/questions/603852/multicast-in-python, lassen Sie die Definition des MCAST_PORT und die Zeile "sock.bind ..." weg und ersetzen Sie die letzte Zeile (print. ..) mit Pass. Dadurch erhalten Sie ein Programm ähnlich dem SOCAT-Beispiel, ohne einen Dummy-Port zu lesen.