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 代码。
我正在尝试使用 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 代码。