首页 文章

Python UDP广播

提问于
浏览
1

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

1 回答

  • 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套接字来发送和接收数据包 .

相关问题