【问题标题】:Python UDP broadcastPython UDP 广播
【发布时间】:2017-04-19 08:28:38
【问题描述】:

好的,我将尝试解释这里发生了什么...我有一个由多个相同类型设备组成的网络。我有一个程序可以在网络上的任何 pc 上运行,它可以发现这些单独的设备并按 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()

【问题讨论】:

  • 您可能希望使用多播以便只中断感兴趣的设备,而不是网络上的所有设备。使用广播是一个坏主意。太糟糕了,广播完全从 IPv6 中删除,转而支持多播。许多公司会拒绝使用广播的应用程序,因为它会无缘无故地中断 LAN 上的每个主机,并且会带来一些安全风险。

标签: python sockets networking udp


【解决方案1】:

要接收 UDP 数据包,您需要将套接字绑定到要接收数据包的 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 套接字来发送和接收数据包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 2016-02-25
    • 2013-05-15
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多