Programme intégré ou open source Linux pour rejoindre un groupe de multidiffusion?

7

J'utilise tcpdump pour capturer les paquets de multidiffusion et je devais coder un programme personnalisé pour rejoindre les flux de multidiffusion afin que tcpdump "voie" les paquets. Vous vous demandez simplement si Netcat ou d'autres applications peuvent effectuer cette fonction à la place?

chriskirk
la source

Réponses:

10

Vous pouvez le faire en utilisant le ip maddr add commander.


SYNTAXE

ip maddr [ add | del ] MULTIADDR dev STRING 

LA DESCRIPTION

Il attache / détache une adresse de multidiffusion de couche de liaison statique pour écouter sur l'interface. Notez qu'il est impossible de joindre des groupes de multidiffusion avec protocole de manière statique. Cette commande ne gère que les adresses de couche liaison.

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

EXEMPLES

Exemple pour une connexion filaire:

ip maddr add ff02::fb dev eth0

Exemple pour une connexion sans fil:

ip maddr add 224.0.0.251 dev wlan0
grawity
la source
L'exécution de cette opération sur une boîte Ubuntu 14.04 génère le message d'erreur suivant: "ff02" is invalid lladdr. Error: "ff02" is not a legal ll address.
Nathan Osman
3
Après plus de creuser, il semble que ip maddr ne fonctionne qu'avec couche de liaison adresses de multidiffusion et non couche de protocole adresses de multidiffusion.
Nathan Osman
@ NathanOsman - Avez-vous déjà trouvé le moyen de vous abonner aux adresses de multidiffusion de couche de protocole?
kit
Malheureusement, cette réponse ne répond pas à la question car elle ne fonctionne que pour couche de liaison c'est-à-dire les adresses MAC. L’exemple IPv6 échoue comme indiqué dans le premier commentaire, et l’exemple IPv4 échoue mais de manière silencieuse (c’est-à-dire que le groupe n’est ni joint ni répertorié par ip maddr show )
Pierz
8

On peut utiliser socat pour s’abonner à des groupes. Cela fonctionne bien pour les abonnements L2 et L3:

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

Cela va s'abonner au groupe 239.0.1.68 en utilisant l'interface avec l'adresse 10.100.201.1. le UDP4-DATAGRAM:239.101.1.68:8889 bit écoute les paquets d’un groupe factice et d’un port udp qui ne doivent recevoir aucune donnée afin d’empêcher socat de tout afficher également sur stdout. Si, au lieu de cela, vous voulez diriger le contenu vers stdout, changez ce groupe et ce port pour qu'il devienne le groupe et le port réels auxquels vous souhaitez vous abonner.

Multiple séparé par des virgules ip-add-membership Des directives peuvent être spécifiées pour s’abonner à plusieurs groupes en même temps. Lorsque socat se ferme, il semble également supprimer les abonnements IGMP.

NeilenMarais
la source
0

En plus de socat réponse, voici une solution lourde - smcroute . Cette application fonctionne comme un démon et peut être contrôlée à la volée:

smcroutectl join eth0 239.1.1.27
smcroutectl leave eth0 239.1.1.27
SergA
la source
0

Utilisez la partie "Recevoir" dans https://stackoverflow.com/questions/603852/multicast-in-python , omettez la définition de MCAST_PORT et la ligne "sock.bind ..." et remplacez la dernière ligne (print ...) par pass. Cela vous donne un programme similaire à l'exemple SOCAT sans lire un port factice.

Siegfried
la source