Python 多播未在 BusyBox 上接收数据
Python Multicast Not Receiving Data on BusyBox
我们正在尝试让我们的 Python 应用响应通过 UDP 的多播请求。我们有这个 Python 代码,它在我们的 Raspberry Pi 运行 Raspian 上运行得很好,但我们试图将它移植到我们的 BusyBox 环境中,但它永远不会响应请求(除非它在本地子网上)。
import socket
import struct
host = '172.20.0.56'
MCAST_GRP = '224.1.1.1'
MCAST_PORT = 49999
IS_ALL_GROUPS = True
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
if IS_ALL_GROUPS:
# on this port, receives ALL multicast groups
sock.bind(('', MCAST_PORT))
else:
# on this port, listen ONLY to MCAST_GRP
sock.bind((MCAST_GRP, MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_IF, socket.inet_aton(host))
sock.setsockopt(socket.SOL_IP, socket.IP_ADD_MEMBERSHIP,
socket.inet_aton(MCAST_GRP) + socket.inet_aton(host))
while True:
print(sock.recv(1024))
Netstat 显示正在设置成员组:
$ netstat -g
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo 1 224.0.0.1
eth0 1 224.1.1.1
IP A表示单板支持MULTICAST。我们可以看到组中的其他机器收到了消息。还有什么我们可以尝试的吗?
发布此条目后立即找到答案。
我们必须将文件 /usr/lib/sysctl.d/50-default.conf
中的 net.ipv4.conf.all.rp_filter = 2 更改为 net.ipv4.conf.all.rp_filter = 0
现在可以正常使用了!
我们正在尝试让我们的 Python 应用响应通过 UDP 的多播请求。我们有这个 Python 代码,它在我们的 Raspberry Pi 运行 Raspian 上运行得很好,但我们试图将它移植到我们的 BusyBox 环境中,但它永远不会响应请求(除非它在本地子网上)。
import socket
import struct
host = '172.20.0.56'
MCAST_GRP = '224.1.1.1'
MCAST_PORT = 49999
IS_ALL_GROUPS = True
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
if IS_ALL_GROUPS:
# on this port, receives ALL multicast groups
sock.bind(('', MCAST_PORT))
else:
# on this port, listen ONLY to MCAST_GRP
sock.bind((MCAST_GRP, MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_IF, socket.inet_aton(host))
sock.setsockopt(socket.SOL_IP, socket.IP_ADD_MEMBERSHIP,
socket.inet_aton(MCAST_GRP) + socket.inet_aton(host))
while True:
print(sock.recv(1024))
Netstat 显示正在设置成员组:
$ netstat -g
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo 1 224.0.0.1
eth0 1 224.1.1.1
IP A表示单板支持MULTICAST。我们可以看到组中的其他机器收到了消息。还有什么我们可以尝试的吗?
发布此条目后立即找到答案。
我们必须将文件 /usr/lib/sysctl.d/50-default.conf
中的 net.ipv4.conf.all.rp_filter = 2 更改为 net.ipv4.conf.all.rp_filter = 0现在可以正常使用了!