Python UDP广播

标签 python sockets networking udp

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

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()

最佳答案

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

   1 import socket
   2 
   3 UDP_IP = "127.0.0.1"
   4 UDP_PORT = 5005
   5 
   6 sock = socket.socket(socket.AF_INET, # Internet
   7                      socket.SOCK_DGRAM) # UDP
   8 sock.bind((UDP_IP, UDP_PORT))
   9 
  10 while True:
  11     data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
  12     print "received message:", data

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

关于Python UDP广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40965904/

相关文章:

python - 如何将 sympy codegen 与包含已实现函数的表达式一起使用

python - 如何将 Qt5 Tree 的引用返回到一组数据?

python - 防止 Python 在加载脚本时加载脚本的某些部分

winapi - 使用WSAEOPNOTSUPP的closesocket()失败

php - 如何通过 unix socket 设置 Apache2 和 PHP-FPM?

c# - C++ 应用程序和 Xamarin Forms 应用程序之间的实时消息传递框架

java - 来自 "wrong"IP 的数据报

Python statsmodel 稳健线性回归 (RLM) 异常值选择

mysql - Nodejs将mysql套接字连接到另一台主机?

networking - 更改 docker 容器 IP 地址