Linux embutido ou programa de código aberto para entrar no grupo multicast?

7

Estou usando o tcpdump para capturar pacotes multicast e tive que codificar um programa personalizado para unir feeds multicast, então o tcpdump "verá" os pacotes. Basta saber se o netcat ou qualquer outro aplicativo pode executar essa função?

    
por chriskirk 18.08.2011 / 16:02

4 respostas

10

Você pode fazer isso usando o comando ip maddr add .

SINTAXE

ip maddr [ add | del ] MULTIADDR dev STRING 

DESCRIÇÃO

Ele anexa / desanexa um endereço multicast da camada de enlace estático para escutar na interface. Observe que é impossível unir os grupos de multicast de protocolo estaticamente. Este comando só gerencia endereços de camadas de links.

address LLADDRESS (default)
    the link layer multicast address. 
dev NAME
    the device to join/leave this multicast address. 

EXEMPLOS

Exemplo para uma conexão com fio:

ip maddr add ff02::fb dev eth0

Exemplo de uma conexão sem fio:

ip maddr add 224.0.0.251 dev wlan0
    
por 18.08.2011 / 18:12
8

Pode-se usar o socat para se inscrever em grupos. Isso funciona muito bem para a assinatura L2 e L3:

socat STDIO  UDP4-DATAGRAM:239.101.1.68:8889,\
  ip-add-membership=239.0.1.68:10.100.201.1

Isso será registrado no grupo 239.0.1.68 usando a interface com o endereço 10.100.201.1 . O UDP4-DATAGRAM:239.101.1.68:8889 bit ouve os pacotes em um grupo fictício e a porta udp que não deve receber nenhum dado para evitar que a socat também gere tudo para o stdout. Se, em vez disso, você quiser direcionar a carga para stdout, altere esse grupo e a porta para o grupo e a porta reais nos quais você deseja se inscrever.

Várias diretivas ip-add-membership separadas por vírgulas podem ser especificadas para se inscrever em vários grupos ao mesmo tempo. Quando socat sai, parece limpar as assinaturas IGMP também.

    
por 22.09.2015 / 10:01
0

Além de socat answer, aqui está uma solução pesada - smcroute . Esta aplicação é executada como um daemon e pode ser controlada em tempo real:

smcroutectl join eth0 239.1.1.27
smcroutectl leave eth0 239.1.1.27
    
por 14.06.2018 / 09:03
0

Use a parte "Receber" no link , omita a definição do MCAST_PORT e a linha " sock.bind ... "e substitua a última linha (print ...) por pass. Isso lhe dá um programa semelhante ao exemplo SOCAT sem ler uma porta fictícia.

    
por 05.09.2018 / 14:31