Linux内置程序或开源程序加入多播组?


7

我正在使用tcpdump捕获多播数据包,并且必须编写自定义程序以加入多播源,因此tcpdump将“看到”数据包。只是想知道netcat或任何其他应用程序是否可以执行此功能?

Answers:


10

你可以使用 ip maddr add 命令。


句法

ip maddr [ add | del ] MULTIADDR dev STRING 

描述

它附加/分离静态链路层多播地址以监听接口。请注意,无法静态加入协议组播组。此命令仅管理链路层地址。

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

例子

有线连接示例:

ip maddr add ff02::fb dev eth0

无线连接示例:

ip maddr add 224.0.0.251 dev wlan0

在Ubuntu 14.04框上运行此命令会产生以下错误消息: "ff02" is invalid lladdr. Error: "ff02" is not a legal ll address.
Nathan Osman

3
经过多次挖掘后,似乎就是这样 ip maddr 只适用于 链路层 多播地址,而不是 协议层 多播地址。
Nathan Osman

@ NathanOsman-你有没有找到订阅协议层多播地址的方法?
kit

不幸的是,这个答案没有回答这个问题,因为它只适用于 链路层 即MAC地址。 IPv6示例在第1条评论中提到失败,并且IPv4示例失败但是安静地(即该组未加入或列出 ip maddr show
Pierz

8

可以使用socat订阅群组。这适用于L2和L3订阅:

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

这将订阅组 239.0.1.68 使用带地址的接口 10.100.201.1。该 UDP4-DATAGRAM:239.101.1.68:8889 bit侦听虚拟组和udp端口上的数据包,该端口不应接收任何数据以防止socat也将所有内容输出到stdout。相反,如果要将有效负载定向到stdout,请将该组和端口更改为要预订的实际组和端口。

多个逗号分隔 ip-add-membership 可以指定指令同时订阅多个组。当socat退出时,它似乎也清除了IGMP订阅。


0

此外 socat 回答,这是一个重量级的解决方案 - smcroute 。此应用程序作为守护程序运行,可以动态控制:

smcroutectl join eth0 239.1.1.27
smcroutectl leave eth0 239.1.1.27

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.