Comment savoir si la multidiffusion IP est activée

19

J'ai des scripts qui exécutent des tests de multidiffusion IP; cependant, mes scripts échouent sur une machine Linux particulière.

Je sais que je peux regarder CONFIG_IP_MULTICASTdans le fichier de configuration du noyau pour déterminer si le noyau a été compilé avec cela. Cependant, il serait plus facile de signaler les exigences manquantes dans mon script si je pouvais regarder /procou sysctlet obtenir la réponse.

Existe-t-il un moyen de savoir si la multidiffusion IP a été compilée dans le noyau sans regarder CONFIG_IP_MULTICAST?

Mike Pennington
la source

Réponses:

18

Il semble que la plupart des noyaux (post v1) prennent en charge la multidiffusion par défaut ou que CONFIG_IP_MULTICAST soit activé lors de la compilation. Pour vérifier si le noyau compilé et en cours d'exécution souscrit à un groupe de multidiffusion, j'utiliserais netstat -g.

Il semble que la plupart des noyaux (post v1) prennent en charge la multidiffusion par défaut.

[root@centos module]# grep CONFIG_IP_MULTICAST /usr/src/kernels/2.6.18-274.7.1.el5-i686/.config 
CONFIG_IP_MULTICAST=y
[root@centos module]# netstat -g
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      all-systems.mcast.net
eth0            1      224.0.0.251
eth0            1      all-systems.mcast.net

Je vois que l'interface eth0 sur mon hôte pense que son groupe mcast de base abonné 224.0.0.251. Alternativement, si je cingle le groupe ou le réseau et que tous les réseaux hôtes activés pour la multidiffusion connus me sont retournés, je dirais que la multidiffusion fonctionne sur l'hôte. Pouvez-vous essayer netstat -gou cat /proc/net/igmpvoir s'il renvoie des groupes sur votre hôte?

Nikhil Mulley
la source
1
Mais comment déterminez-vous si le routeur auquel cette boîte est connectée prend en charge la multidiffusion?
Nils
1
Multidiffusion - l'expéditeur envoie un seul datagramme de son adresse de monodiffusion à l'adresse du groupe de multidiffusion et les routeurs intermédiaires se chargent de faire des copies et de les envoyer à tous les récepteurs qui ont rejoint le groupe de multidiffusion correspondant.
Nikhil Mulley
3
Si oui, le routeur doit alors prendre en charge la multidiffusion. Cependant, pour les émetteurs / récepteurs, il fonctionne sur IGMP et pour les routeurs, son Protocol Independent Multicast (PIM). Routeur prenant en charge PIM, généralement activé, et groupe de multidiffusion - 224.0.0.0/4. Essayez de mettre un autre PC à l'écoute dans un groupe à l'autre extrémité et envoyez des données au groupe de multidiffusion et vérifiez si le récepteur à l'autre extrémité reçoit des données.Si le réseau de routeurs prend en charge la multidiffusion.Peu d'outils en ligne: imj.ucsb.edu/mcast_detective (Windows)
Nikhil Mulley
20

Sur votre box Linux: ip maddr show donne:

@4Gtest ~]$ ip maddr show
1:      lo
        inet  224.0.0.1
        inet6 ff02::1
2:      p3p1
        link  01:00:5e:00:00:01
        link  33:33:00:00:00:01
        link  33:33:ff:bd:7e:0f
        link  01:00:5e:00:00:fb
        link  01:00:5e:7f:ff:05
        inet  224.127.255.5
        inet  224.0.0.251
        inet  224.0.0.1
        inet6 ff02::1:ffbd:7e0f
        inet6 ff02::1
Alan Beard
la source
1
Comment ajouter un groupe de multidiffusion à une interface?
AR
8
# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F1:FF:EA  
inet addr:78.46.74.27  Bcast:78.46.74.31  Mask:255.255.255.224
inet6 addr: fe80::20c:29ff:fef1:ffea/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1
RX packets:5339836 errors:0 dropped:0 overruns:0 frame:0
TX packets:5486444 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:820300389 (782.2 MiB)  TX bytes:1929979381 (1.7 GiB)
Base address:0x1400 Memory:e8820000-e8840000

Désactiver la multidiffusion:

ifconfig eth0 -multicast

résultat:

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F1:FF:EA  
inet addr:78.46.74.27  Bcast:78.46.74.31  Mask:255.255.255.224
inet6 addr: fe80::20c:29ff:fef1:ffea/64 Scope:Link
UP BROADCAST MTU:1500  Metric:1
RX packets:5339836 errors:0 dropped:0 overruns:0 frame:0
TX packets:5486444 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:820300389 (782.2 MiB)  TX bytes:1929979381 (1.7 GiB)
Base address:0x1400 Memory:e8820000-e8840000

Pas de multidiffusion présente dans l'interface

Activer la multidiffusion:

ifconfig eth0 multicast
facture mate
la source
8
Il convient de mentionner qu'il ifconfigest désormais obsolète sous Linux ... nous devrions utiliser les iproute2utilitaires.
Mike Pennington
7
Cela fait 2 ans et nous utilisons toujoursifconfig
Askar
1
@oscar mais cela ne signifie pas qu'il est bon de le faire car les ipautres utilitaires d' iproute2 reflètent les récents changements dans le code de mise en réseau du noyau Linux (contrairement ifconfig).
pevik
6

En utilisant la ipcommande, on peut vérifier si une interface est capable de multidiffusion en:

ip link show eth0 | grep MULTICAST

Pour activer ou désactiver la multidiffusion, vous pouvez utiliser:

sudo ip link set dev eth0 multicast [on|off] 
Pierz
la source