我有运行 IP 多播测试的脚本;但是,我的脚本在特定的 linux 机器上失败了。
我知道我可以查看CONFIG_IP_MULTICAST
内核配置文件来确定内核是否是用这个编译的。但是,如果我可以查看/proc
或sysctl
得到答案,在我的脚本中标记缺失的需求会更容易。
有没有办法不用查看就知道 IP 多播是否被编译到内核中CONFIG_IP_MULTICAST
?
我想编写一个 linux shell 脚本来捕获特定的多播流量。具体来说,我想创建一个 pcap 文件,其中包含一个特定多播组/端口的所有流量。
这是我用来查看流量的命令行:
tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234
Run Code Online (Sandbox Code Playgroud)
只要我已经建立了对该组的多播订阅,这就可以正常工作。例如,如果我在另一个控制台中运行它:
mdump 233.54.12.234 22001 10.13.252.51
Run Code Online (Sandbox Code Playgroud)
tcpdump
会看到数据包。如果mdump
没有运行,tcpdump
则什么也看不到。
在开始捕获之前,是否有标准的 linux-y 方法来建立这些多播连接?我可以mdump
用来建立这些连接,但这似乎很浪费,因为mdump
将处理组上的所有数据,但我只是打算将其丢弃。
请注意,由于我的特定环境,我不鼓励将界面置于混杂模式。事实上,它可能被禁止。
树莓派上的组播 UDP
我还没有把事情缩小到足够的范围来知道我的问题是因为 debian、raspbian,还是因为我完全遗漏了某些东西。
我有一个 python 应用程序,它使用多播 UDP 让网络上的其他设备知道我的应用程序已启动并在特定 IP 地址上可用。
UDP 多播组是 239.255.250.250,端口是 9131。如果我运行 tcpdump,我可以看到我尝试发送的数据包实际上正在发送数据,但我从未在网络上的其他机器上看到任何通过。
还有其他设备使用具有相同多播组和端口的相同类型的“信标”,我可以看到这些数据包通过其他机器。路由器没有防火墙,在这一点上我真的没有选择。
以下是我知道如何运行的基本诊断。糟糕的 udp chksum 看起来可能没有帮助,但我对此一无所知。
ifconfig 的输出
eth0 Link encap:Ethernet HWaddr b8:27:eb:b2:79:12
inet addr:192.168.2.7 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1682 errors:0 dropped:0 overruns:0 frame:0
TX packets:1686 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:119105 (116.3 KiB) TX bytes:169570 (165.5 KiB)
Run Code Online (Sandbox Code Playgroud)
应用程序运行时 tcpdump 的输出
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
03:29:15.722653 IP (tos 0x0, ttl 1, …
Run Code Online (Sandbox Code Playgroud) 我需要在 30 台 PC 上安装 Linux 操作系统。有没有办法从一个带有多播的 ISO 映像或 Microsoft 中的 WDS 之类的东西进行安装?
我有一个速度为 100Mb 的以太网连接,因此使用单播安装 30 台 PC 可能会非常慢。
我正在设置视频流。
在本地网络中,有两个设备通过 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 月 …
我想在linux中为视频/音频/数据文件传输做多播。
是否有任何实用程序/工具可以这样做?
在 Debian 12.04 LTS 上
我正在尝试net.ipv4.conf.all.mc_forwarding
通过执行以下操作来访问密钥:
须藤 sysctl -w net.ipv4.conf.all.mc_forwarding=1
但每次我这样做时,我都会收到消息
错误:对密钥“net.ipv4.conf.all.mc_forwarding”的权限被拒绝
为什么我会收到这条消息?如何更改此密钥?
我正在尝试配置 firewalld(Fedora 21),以便响应从使用临时 UDP 源端口的客户端应用程序发送到多播目标的 MDNS 查询。响应是单播的。序列是这样的(使用wireshark捕获)
启用了添加端口 5353 UDP 的 firewalld mdns 服务,但这对响应没有帮助。
任何指针将不胜感激。
首先,我查阅了几个Q/A,我可以确保以下几点得到满足:
IGMP 侦听不会被交换机/路由器过滤。
Bonjour 服务 ( mDNSResponder.exe
) 在防火墙以及UDP 端口 5353(Windows 端)上被授予并允许。
Avahi 配置正确(并且禁用了 ipv6)并且nssitch.conf
已完成所需的修改
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
Avahi-daemon 以及 bonjour 服务正在运行。
ipv6
在活动网络接口上被禁用,avahi-daemon 也配置为不使用 ipv6: use-ipv6=no
。一段时间后,从 Windows.local
发出 a 后,与树莓派对应的主机名不再解析ping pi.local
,请注意,启动时它响应完美,并且重新启动 avahi-daemon 将在问题再次出现之前临时修复它。
就在mdns解析失败之后,我在锉刀上执行了以下命令,avahi-resolve -n pi.local
它显示了ipv6(fe80::xxaa:yybb:zzde:ee
),这很奇怪,因为正如我提到的,我在avahi配置中禁用了ipv6,就在我重新执行相同的命令之后,这次我得到了ipv4作为答案
pi.local 192.168.1.7
ping 似乎也再次响应。
运行 Linux pi 4.4.38-v7+ #938
使用适用于 Windows v2.0.2 的 Bonjour 打印服务:https://support.apple.com/kb/DL999,并且它作为服务运行。
avahi-resolve …
我在玩 IPv6 的多播功能。
$ ping ff02::2%wlp3s0
Run Code Online (Sandbox Code Playgroud)
这通常会导致来自本地网段(维基百科 - IPv6)上的所有路由器的回声回复。所以就我而言,我的家用路由器。
但是,我发现我原来的 nftables 规则阻止了回声回复:
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iifname "lo" accept
ct state { established, related } accept
ct state invalid drop
ip protocol icmp accept
ip6 nexthdr ipv6-icmp accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
} …
Run Code Online (Sandbox Code Playgroud) multicast ×10
networking ×4
linux ×3
tcpdump ×2
udp ×2
avahi ×1
encryption ×1
firewalld ×1
ip ×1
ip-conntrack ×1
ipv6 ×1
linux-kernel ×1
mdns ×1
netfilter ×1
nftables ×1
python ×1
scripting ×1
shell-script ×1