我想创建一个包含 3 台计算机的多播组,然后对所有计算机执行 ping 操作,在 Linux CLI 中如何完成?
答案1
您可以使用socat
命令来实现此目的,如文档中所述:
示例 3:多播对等点
可以将多播发送方和接收方组合在一个 socat 地址中。这允许在本地网络上的不同主机上启动对称通信的进程,因此每个进程都可以发送由所有其他进程接收的消息。
socat STDIO UDP4-DATAGRAM:224.1.0.1:6666,bind=:6666,range=192.168.10.0/24,ip-add-membership=224.1.0.1:192.168.10.2
该命令对主机192.168.10.2有效;使该地址适应主机的特定接口地址。
因此,对于一个更简单的示例,不关心源验证也不选择接口(因此遵循 IPv4 的默认路由:路由器可能需要其他选项才能使用 LAN 端),在每个系统上运行此命令(甚至使用reuseaddr
:multicast多次本地相应复制数据)在同一个局域网内实现通信:
socat - UDP4-DATAGRAM:239.255.255.245:6666,bind=:6666,ip-add-membership=239.255.255.245:0.0.0.0,reuseaddr
当然,多播不是由标准路由器路由的。如果必须跨多个 LAN 进行扩展,则需要设置多播路由器,并且超出了本答案的范围。
仅支持 IPv6 的简单工具更难找到。上面使用 IPv6 地址进行转换的示例需要传递原始的 setsockopt 值才能达到相同的效果。第一个系统接口上的地址为 ff05::db8:1:2(之后罗),因此索引为 2(系统默认值IPv6很容易出错),这将是可读性较差的命令:
socat - 'UDP6-DATAGRAM:[ff05::db8:1:2]:6666,bind=:6666,setsockopt=41:17:i2,setsockopt=41:20:xff0500000000000000000db800010002i2,reuseaddr'