组播搭建

主机要求:
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)

  

posted @ 2025-08-21 14:28  铿锵有力自信且坚定  阅读(29)  评论(0)    收藏  举报