Python 原始多播

Python raw multicast

我正在尝试使用 Python 收听多播流量。我试着听解码 carp 协议,所以它是原始流量而不是 UDP。但是我没有收到任何数据。

如果在同一台主机上,我使用一个应用程序来侦听 carp 流量 (ucarp),该应用程序会看到流量,因此它应该可以正常工作。

这是我使用的代码:

import socket
import struct

MCAST_GRP = '224.0.0.18'

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, 112)

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

print("waiting for data...")
print(s.recvfrom(10))

事实上,这段代码是有效的。我使用的网络设置不是。我不知道为什么这适用于 ucarp 而不是 python。

无法正常工作的设置是 libvirt 主机 运行 python 和带有 openbsd 发送鲤鱼的 kvm VM。

工作设置是两个 VM,一个 openbsd 发送鲤鱼和一个 Debian/Linux 运行 python 代码。