Multicast in Practice: Group Control and Common Pitfalls¶
Practical multicast setup, group membership control, and debugging lessons.
This English edition retains the original diagrams and examples for direct use.




Commands and examples¶
# 临时关掉反向路径过滤,看看通不通
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
import socket
import struct
MCAST_GRP = '224.1.1.1'
MCAST_PORT = 65000
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))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
print(f"Waiting for {MCAST_GRP}:{MCAST_PORT}...")
while True:
data, addr = sock.recvfrom(1024)
print(f"Recv from {addr}, data: {data.decode()}")
// 强制从 192.168.1.100 这个接口发送组播
struct in_addr localInterface;
localInterface.s_addr = inet_addr("192.168.1.100");
setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_IF, (char *)&localInterface, sizeof(localInterface));
struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = inet_addr("224.1.1.1");
// 明确指定从 eth0 的 IP (192.168.1.100) 上加组
mreq.imr_interface.s_addr = inet_addr("192.168.1.100");
setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
Practical notes¶
Adapt the commands and configuration to the version, distribution, and target hardware being used.