TL; DR - Escolha um:
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
No começo eu ia dizer "use ip maddress add
e termine com isso". O problema é que ip maddress
afeta apenas os endereços multicast camada de enlace dos endereços multicast protocolo ( man 8 ip-maddress
).
Dito isto, o uso do sinal autojoin
com o endereço faz o truque bem.
Isso levanta algumas questões subseqüentes. Eu suponho que você estará executando tcpdump
ou tshark
que você tem permissão de root. No caso em que você não 22001 é uma porta numerada alta e outros utilitários como socat
também farão as coisas.
Não acredite na minha palavra. Apenas para testar isso, podemos gerar pacotes UDP multicast com socat
ou ncat
(geralmente empacotados via nmap
/ nmap-ncat
).
Em alguns hosts, execute um das duas combinações a seguir:
Opção 1:
sudo ip addr add 233.54.12.234/32 dev eth1 autojoin
Opção 2:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 /dev/null &
A primeira opção exigirá raiz, ou pelo menos a capacidade CAP_NET_ADMIN
. A segunda opção não requer raiz, mas também espera ser executada em primeiro plano e, portanto, pode ser menos propícia a scripts (embora rastreie o ID do processo filho e limpe-o com um trap
no BASH pode ser exatamente o que você está procurando.
Uma vez feito isso (mas antes de testar o nosso comando tcpdump
/ tshark
) certifique-se de que o kernel reconheça a interface tendo ingressado no grupo IGMP correto. Se você está se sentindo super chique, você pode enlouquecer o hex em /proc/net/igmp
, mas eu sugiro apenas executar netstat -gn
.
Depois de verificar se você vê a interface inscrita no grupo correto, acione seu comando tcpdump:
tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234
Alternativamente, se você não quer seguir completamente a rota do tcpdump (ou tropeçou nesta resposta e está curioso para ver o multicast em ação) você pode usar o comando socat
acima para unir e fazer eco do conteúdo para STDOUT
substituindo /dev/null
por STDOUT
:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1
Em seguida, em outra máquina, use uma das duas opções a seguir para enviar alguns dados de teste simples:
Opção 1:
socat STDIO UDP-DATAGRAM:233.54.12.234:22001
Opção 2:
ncat -u 233.54.12.234 22001
Quando você executa um desses comandos, ele espera interativamente pela entrada. Basta digitar algumas coisas, aperte enter para enviar e, em seguida, CTRL+D
quando terminar de enviar uma mensagem EOF
.
Neste ponto, você deve ter visto um teste de fim de fim e, com alguns comandos, construir o pior e mais inseguro sistema de bate-papo do mundo.