Linux

如何創建多播組並向其發送消息?

  • August 16, 2021

我想用 3 台電腦創建一個多播組,然後對它們全部執行 ping 操作,它是如何在 Linux CLI 中完成的?

您可以使用該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 進行擴展,則需要設置(a)組播路由器,這超出了此答案的範圍。

僅支持 IPv6 的簡單工具更難找到。上面使用 IPv6 地址轉換的範例需要傳遞原始 setsockopt 值才能達到相同的效果。在第一個系統的介面上使用地址 ff05::db8:1:2 (在lo之後),因此使用索引 2 (系統的預設值很容易與 IPv6 出錯),這將是可讀性較差的命令:

socat - 'UDP6-DATAGRAM:[ff05::db8:1:2]:6666,bind=:6666,setsockopt=41:17:i2,setsockopt=41:20:xff0500000000000000000db800010002i2,reuseaddr'

引用自:https://unix.stackexchange.com/questions/646963