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 added essere fatto con esso". Il problema ip maddressriguarda solo gli indirizzi multicast a livello di link e non gli indirizzi multicast di protocollo ( man 8 ip-maddress).
Detto questo, usare la autojoinbandiera con il verbo dell'indirizzo fa proprio il trucco.
Ciò solleva tuttavia alcune domande successive. Presumo dato che sarai in esecuzione tcpdumpo tsharkche hai il permesso di root. Nel caso in cui 22001 non sia una porta con numero elevato e anche altre utility come socatfaranno le cose.
Non credermi sulla parola però. Solo per provarlo possiamo generare pacchetti UDP multicast con socato 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 trapin BASH potrebbe essere proprio quello che stai cercando.
Una volta fatto (ma prima di andare fuori di testa testando il nostro tcpdump/ tsharkcomando) 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 socatcomando sopra per unirti e fare eco al contenuto STDOUTsostituendolo /dev/nullcon 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+Dquando hai finito di inviare un EOFmessaggio.
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.
-pbandiera, 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.