Dumping multicast UDP stream com socat

7

Estou configurando o streaming de vídeo.

Na rede local, há dois dispositivos que transmitem vídeo por meio de multicast UDP. Um é o computador normal com Linux (streaming para 239.220.221.10, porta 9200), o segundo é um streamer DVB-S especial (streaming para 239.220.220.32, porta 9200). Existem vários set-top boxes de IPTV na rede, que são capazes de reproduzir fluxos de qualquer fonte. Existem também alguns switches Cisco para filtragem multicast, mas não consigo verificar sua configuração.

Em outro computador (rodando o Ubuntu 12.04) eu gostaria de capturar o fluxo, preferencialmente usando VLC ou FFMPEG. A partir do streamer de computador (239.220.221.10) funciona, mas a partir de streamer especial (239.220.220.32) não recebo fluxo.

O que eu tentei

Tentei refinar o problema e tentei capturar datagramas UDP brutos com o socat e o tcpdump. Se eu executar o seguinte comando, recebo um vídeo válido no arquivo video.dump:

> socat UDP4-RECVFROM:9200,ip-add-membership=239.220.221.10:0.0.0.0 - > video.dump

Quando eu executo o tcpdump simultaneamente, vejo datagramas de entrada:

> sudo tcpdump -i eth1 
18:00:39.059824 IP 10.1.2.202.41852 > 239.220.221.10.9200: UDP, length 1316
18:00:39.060789 IP 10.1.2.202.41852 > 239.220.221.10.9200: UDP, length 1316
...

Quando tento executar os mesmos comandos para o streamer especial (basta alterar o endereço de associação IP para socat para 239.220.220.32), o tcpdump mostra os datagramas recebidos de 239.220.220.32, mas o arquivo video.dump está vazio.

Qual pode ser a razão pela qual socat não vê os datagramas que estão claramente chegando?

Atualização em 4 de março de 2014:

Acabei de descobrir que existem diferentes intervalos de IP na rede:

Computer streamer: 10.1.2.202 / 255.0.0.0
"Special" streamer: 192.168.85.5 / 255.255.255.0
Computer on which I am trying to grab stream: 10.1.2.203 / 255.0.0.0

Quando eu mudo o endereço IP do último para 192.168.85.x / 255.255.255.0, eu posso pegar streams do streamer "Special", mas não do streamer do computador.

Portanto, a questão muda para: é possível configurar o socat, o VLC ou o FFMPEG para aceitar também fluxos multicast que possuem um endereço de origem fora do intervalo da interface Ethernet?

    
por Milan Fabian 01.03.2014 / 18:30

1 resposta

1

O tcpdump invocou sem -p alterna uma NIC para o modo promisc - aparentemente, algum filtro de nível superior entra em ação, evitando que o socat receba o tráfego.

Um dos suspeitos "geralmente culpados" é rp_filter - você tem uma rota para ambas as redes source via eth1? Eu acho que você pode ter o padrão gw via eth0. Adicione a rota ausente ou desative o rp_filter na interface eth1.

No caso do OP:

ip r a 192.168.85.0/24 dev eth1

ou

sysctl -w net.ipv4.conf.eth1.rp_filter=0
    
por 18.05.2018 / 19:47