使用python检索多播

问题描述 投票:0回答:1

我正在为现有的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)

找出我在做什么错的任何帮助。

python sockets multicast
1个回答
0
投票

所以我想出了自己的问题。我很早就检查过iptables是一个问题,没有运气。但是我在解决当前问题的过程中修复/修改了一些内容。原来上面的代码工作得很好,它是用firewalld / iptables规则阻止了多播的接收。

© www.soinside.com 2019 - 2025. All rights reserved.