TL; DR - Scegli uno:
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
All'inizio stavo per dire "basta usare ip maddress add
ed essere fatto con esso". Il problema ip maddress
riguarda solo gli indirizzi multicast a livello di link e non gli indirizzi multicast di protocollo ( man 8 ip-maddress
).
Detto questo, usare la autojoin
bandiera con il verbo dell'indirizzo fa proprio il trucco.
Ciò solleva tuttavia alcune domande successive. Presumo dato che sarai in esecuzione tcpdump
o tshark
che hai il permesso di root. Nel caso in cui 22001 non sia una porta con numero elevato e anche altre utility come socat
faranno le cose.
Non credermi sulla parola però. Solo per provarlo possiamo generare pacchetti UDP multicast con socat
o ncat
(generalmente impacchettati tramite nmap
/ nmap-ncat
).
Su alcuni host eseguire una delle due seguenti combinazioni:
Opzione 1:
sudo ip addr add 233.54.12.234/32 dev eth1 autojoin
Opzione 2:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 /dev/null &
La prima opzione richiederà root o almeno la funzionalità CAP_NET_ADMIN
. La seconda opzione non richiede root, ma si aspetta anche di essere eseguita in primo piano e quindi potrebbe essere meno favorevole allo scripting (anche se tracciare l'ID del processo figlio e ripulirlo con un trap
in BASH potrebbe essere proprio quello che stai cercando.
Una volta fatto (ma prima di andare fuori di testa testando il nostro tcpdump
/ tshark
comando) assicurati che il kernel riconosca l'interfaccia che ha aderito al gruppo IGMP corretto. Se ti senti super fantasioso puoi impazzire analizzando l'esagono /proc/net/igmp
, ma suggerirei solo di correre netstat -gn
.
Una volta verificato che vedi l'interfaccia sottoscritta al gruppo corretto, avvia il tuo comando tcpdump:
tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234
In alternativa, se non vuoi seguire completamente la rotta di tcpdump (o inciampare su questa risposta e sei solo curioso di vedere il multicast in azione) puoi usare il socat
comando sopra per unirti e fare eco al contenuto STDOUT
sostituendolo /dev/null
con STDOUT
:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1
Quindi, da un'altra macchina utilizzare una delle due seguenti opzioni per inviare alcuni semplici dati di test:
Opzione 1:
socat STDIO UDP-DATAGRAM:233.54.12.234:22001
Opzione 2:
ncat -u 233.54.12.234 22001
Quando si esegue uno di questi comandi, attenderà in modo interattivo l'input. Digita solo alcune cose, premi invio per inviare, quindi CTRL+D
quando hai finito di inviare un EOF
messaggio.
A questo punto avresti dovuto vedere un test end-to-end e con pochi comandi creato il sistema di chat peggiore e più insicuro al mondo.
-p
bandiera, nelle versioni standard di tcpdump, si trasforma modalità promiscua fuori , come è il default. In modalità promiscua, dovrebbe visualizzare tutto il traffico, incluso il traffico multicast, indipendentemente dal fatto che l'abbonamento sia stato stabilito, a meno che non ci si trovi su una rete commutata ed è necessario disporre dell'abbonamento stabilito per consentire lo switch forwarding del traffico.