组播搭建
主机要求:
ip a 查看网卡有 MULTICAST 就支持组播
一.socat命令搭建组播:
1.接收端
socat -u UDP4-RECVFROM:5007,ip-add-membership=224.1.1.1:0,fork STDOUT
使用:
ip-add-membership=组播地址:本地IP
解析:
UDP4-RECVFROM:5007 → 本地 UDP 端口 5007
224.1.1.1 → 你要加入的 组播地址
0 → 代表所有本地网卡都尝试加入组播组
fork → 每个数据包独立处理
STDOUT → 打印到终端
①别的参数使用
保存到文件
socat -u UDP4-RECVFROM:5007,ip-add-membership=224.1.1.1:0,fork FILE:received.txt
追加到文件
socat -u UDP4-RECVFROM:5007,ip-add-membership=224.1.1.1:0,fork "FILE:received.txt,append"
发送到TCP连接(转发)
socat -u UDP4-RECVFROM:5007,ip-add-membership=224.1.1.1:0,fork TCP:127.0.0.1:6000
作为管道给另一个程序处理
socat -u UDP4-RECVFROM:5007,ip-add-membership=224.1.1.1:0,fork EXEC:"grep ERROR"
2.发送端
socat - UDP4-DATAGRAM:224.1.1.1:5007,ip-multicast-ttl=1
或者(发送一个内容)
echo "Hello Multicast" | socat - UDP4-DATAGRAM:224.1.1.1:5007,ip-multicast-ttl=1
或者(发送一个文件内的内容)
socat -u FILE:test.txt UDP4-DATAGRAM:224.1.1.1:5007,ip-multicast-ttl=1
①别的参数使用
发送端指定网卡
socat -u FILE:test.txt UDP4-DATAGRAM:224.1.1.1:5007,ip-multicast-ttl=1,ip-multicast-iface=eth0
二.iperf(网络性能测试工具)
不能发送具体内容
1.接收端
iperf -s -u -B 224.1.1.1 -i 1
2.发送端
iperf -c 224.1.1.1 -u -t 10 -b 1M
三.python3脚本
1.接收端
import socket
import struct
MCAST_GRP = '224.1.1.1' # 组播地址
MCAST_PORT = 5007 # 端口
# UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT)) # 监听所有网卡上的 5007 端口
# 加入组播组
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
print("Listening on multicast group {}:{}".format(MCAST_GRP, MCAST_PORT))
while True:
data, addr = sock.recvfrom(1024)
print("Received from {}: {}".format(addr, data.decode()))
2.发送端
import socket
import time
MCAST_GRP = '224.1.1.1'
MCAST_PORT = 5007
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
# 设置 TTL = 1,限制在本地网络传播
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 1)
while True:
message = "Hello Multicast!"
sock.sendto(message.encode(), (MCAST_GRP, MCAST_PORT))
print("Sent:", message)
time.sleep(2)

浙公网安备 33010602011771号