使用 socat 转储多播 UDP 流

Mil*_*ian 7 multicast tcpdump udp

我正在设置视频流。

在本地网络中,有两个设备通过 UDP 多播流式传输视频。一台是使用 Linux 的普通计算机(流式传输到 239.220.221.10,端口 9200),第二台是特殊的 DVB-S 流式传输器(流式传输到 239.220.220.32,端口 9200)。网络中有多个 IPTV 机顶盒,它们能够播放来自任一来源的流。还有一些用于组播过滤的 Cisco 交换机,但我无法检查它们的配置。

在不同的计算机(运行 Ubuntu 12.04)上,我想捕获流,最好使用 VLC 或 FFMPEG。从计算机流媒体(239.220.221.10)它可以工作,但从特殊流媒体(239.220.220.32)我没有流。

我试过的

我试图缩小问题的范围,并尝试使用 socat 和 tcpdump 捕获原始 UDP 数据报。如果我运行以下命令,我会在 video.dump 文件中获得有效的视频:

> socat UDP4-RECVFROM:9200,ip-add-membership=239.220.221.10:0.0.0.0 - > video.dump
Run Code Online (Sandbox Code Playgroud)

当我同时运行 tcpdump 时,我看到传入的数据报:

> 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
...
Run Code Online (Sandbox Code Playgroud)

当我尝试为特殊流媒体运行相同的命令时(只需将 socat 的 IP 成员地址更改为 239.220.220.32),tcpdump 显示来自 239.220.220.32 的传入数据报,但 video.dump 文件为空。

socat没有看到明显即将到来的数据报的原因是什么?

2014 年 3 月 4 日更新:

我刚刚发现网络中有不同的 IP 范围:

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
Run Code Online (Sandbox Code Playgroud)

当我将最后一个的 IP 地址更改为 192.168.85.x / 255.255.255.0 时,我可以从“特殊”流媒体捕捉流,但不能从计算机流媒体捕捉流。

因此问题变为:是否可以将 socat、VLC 或 FFMPEG 设置为也接受源地址超出以太网接口范围的多播流?

Tom*_*ala 1

不带 -p 调用 tcpdump 将 NIC 切换到 promisc 模式 - 显然一些更高级别的过滤启动,阻止 socat 接收流量。

“通常有罪”的嫌疑人之一是 rp_filter - 您是否有通过 eth1 到达两个源网络的路由?我猜你可能通过 eth0 有默认网关。添加缺少的路由,或禁用 eth1 接口上的 rp_filter。

在OP情况下:

ip r a 192.168.85.0/24 dev eth1
Run Code Online (Sandbox Code Playgroud)

或者

sysctl -w net.ipv4.conf.eth1.rp_filter=0
Run Code Online (Sandbox Code Playgroud)