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 dizia "apenas use ip maddress add
e termine com isso". O problema ip maddress
afeta apenas os endereços multicast da camada de link e não os endereços multicast do protocolo ( man 8 ip-maddress
).
Dito isto, usar a autojoin
bandeira com o verbo endereço faz o truque muito bem.
Isso levanta algumas questões subsequentes. Presumo que você estará executando tcpdump
ou tshark
que tenha permissão de root. No caso de você não ter 22001, é uma porta com numeração alta e outros utilitários como socat
também farão as coisas.
Mas não aceite minha palavra. Apenas para testar isso, podemos gerar pacotes UDP multicast com socat
ou ncat
(geralmente empacotados via nmap
/ nmap-ncat
).
Em algum número de hosts, execute uma 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 rastrear o ID do processo filho e limpá-lo com um trap
BASH possa ser exatamente o que você está procurando.
Uma vez feito isso (mas antes de enlouquecermos testando nosso tcpdump
/ tshark
comando), verifique se o kernel reconhece a interface que ingressou no grupo IGMP correto. Se você está se sentindo super extravagante, pode enlouquecer ao analisar o feitiço /proc/net/igmp
, mas eu sugiro apenas correr netstat -gn
.
Depois de verificar se você vê a interface inscrita no grupo correto, inicie o comando tcpdump:
tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234
Como alternativa, se você não quiser seguir completamente a rota do tcpdump (ou se deparou com essa resposta e está curioso para ver a difusão seletiva em ação), use o socat
comando acima para ingressar e ecoar o conteúdo STDOUT
substituindo /dev/null
por STDOUT
:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1
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 a entrada. Basta digitar algumas coisas, pressionar enter para enviar e CTRL+D
quando terminar de enviar uma EOF
mensagem.
Nesse ponto, você deveria ter visto um teste de ponta a ponta e com alguns comandos criados o pior e mais inseguro sistema de bate-papo do mundo.
-p
bandeira, em versões padrão do tcpdump, transforma o modo promíscuo off , como é on por padrão. No modo promíscuo, ele deve ver todo o tráfego, incluindo o tráfego multicast, independentemente de você ter a assinatura estabelecida - a menos que você esteja em uma rede comutada e seja necessário que a assinatura seja estabelecida para que o comutador encaminhe o tráfego.