组播搭建

轻功秘籍

主机要求:ip a 查看网卡有 MULTICAST 就支持组播 一.socat命令搭建组播:1.接收端socat -u UDP4-RECVFROM:5007,ip-add-membership=224.1.1.1:0,fork STDOUT 使用:ip-add-m……

主机要求: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 端口 5007224.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)