Python UDP 广播

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

好吧,我将尝试解释一下这里发生了什么...我有一个由多个相同类型设备组成的网络。我有一个程序可以在网络上的任何电脑上运行,它可以发现这些单独的设备并按 ip、名称、mac 等对它们进行分类。该程序允许配置每个设备。设备将包含发现信息的 udp 数据包广播到“255.255.255.255”。我可以运行wireshark并拦截从设备广播的数据包。我有一个 python 程序,它将用我选择的数据广播 udp 数据包.. 现在.. 这源于我学习 python 和我面向项目的方法.. 我这样学得更好:)。好吧,话虽这么说。我的想法是广播另一个设备广播的确切 udp 数据包,这反过来应该让我作为特定的网络设备进入发现软件。通过在wireshark 中跟踪 udp 流,我可以复制数据并输入它在我的Python程序中并在网络上广播。我可以广播到任何目标IP并在wireshark中查看它,但是当我尝试将其发送到255.255.255.255时它永远不会显示。现在我明白路由器不会通过本地网络转发 255x4 广播。当我运行发现程序时,我可以看到所有设备将其数据包广播到 255x4,但看不到来自我的电脑的数据包。任何想法将不胜感激。

Python代码:

import udp
import socket   #for sockets
import sys  #for exit

# create dgram udp socket
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
except socket.error:
    print 'Failed to create socket'
    sys.exit()

host = '255.255.255.255';
port = 55558;

while(1) :
    msg = '''...z..
hrQT.b.......hrQT.b
.....w...NanoStation M2...N2N
..Test......"XM.ar7240.v5.6.2.27929.150716.1201........NanoStation M2'''
    try :
        #Set the whole string
        s.sendto(msg, (host, port))

        # receive data from client (data, addr)
        d = s.recvfrom(1024)
        reply = d[0]
        addr = d[1]

        print 'Server reply : ' + reply

    except socket.error, msg:
        print 'Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
        sys.exit()
python sockets networking udp
1个回答
2
投票

要接收 UDP 数据包,您需要将套接字绑定到要接收数据包的 IP 地址和 UDP 端口。

import socket

UDP_IP = "127.0.0.1"
UDP_PORT = 5005

sock = socket.socket(socket.AF_INET, # Internet
                  socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))

while True:
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
    print "received message:", data

我建议使用不同的 UDP 套接字来发送和接收数据包。

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