好的,我将尝试解释这里发生了什么......我有一个多个相同类型设备的网络。我有一个程序可以在网络上的任何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()
答案 0 :(得分: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套接字发送和接收数据包。