好我即将尝试解释这里发生了什么...我有一个多个相同类型设备的网络 . 我有一个程序可以在网络上的任何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 回答
要接收UDP数据包,您需要将套接字绑定到要接收数据包的IP地址和UDP端口 .
我建议使用不同的UDP套接字来发送和接收数据包 .