我正在为现有的SW测试工具,该软件在240.240.240.1端口2349的多播ip上输出消息。我正在接收多播消息的IP接口是192.168.0.4。我可以看到这些消息是通过Wireshark推送到网络上的。甚至netstat -ng也会显示订阅。但是,我在python中编写的接收器无法接收它们。我确实是从另一个线程借来的以下代码,试图对其进行修改以适合我的情况。
import socket
import struct
import sys
multicast_group = '240.240.240.1'
server_address = (multicast_group, 2345)
# Create the socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Bind to the server address
sock.bind(server_address)
# Tell the operating system to add the socket to
# the multicast group on all interfaces.
group = socket.inet_aton(multicast_group)
src = bytearray(socket.inet_aton("192.168.0.4"))
mreq = bytearray(group)
mreq.extend(src)
sock.setsockopt(
socket.IPPROTO_IP,
socket.IP_ADD_MEMBERSHIP,
mreq)
# Receive/respond loop
while True:
print('\nwaiting to receive message')
data, address = sock.recvfrom(1024)
print('received {} bytes from {}'.format(
len(data), address))
print(data)
print('sending acknowledgement to', address)
sock.sendto(b'ack', address)
找出我在做什么错的任何帮助。
所以我想出了自己的问题。我很早就检查过iptables是一个问题,没有运气。但是我在解决当前问题的过程中修复/修改了一些内容。原来上面的代码工作得很好,它是用firewalld / iptables规则阻止了多播的接收。