【发布时间】:2014-11-17 16:17:55
【问题描述】:
接下来的代码发送广播包(在本地Wireshark中查看):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
reqdata = struct.pack('<l', 0x01)
s.sendto( reqdata, ( '192.168.1.255', port ))
但是当我在尖括号中写“广播”而不是恒定的子网广播时,包没有被发送:
s.sendto( reqdata, ( '<broadcast>', port ))
环境:
ActivePython 2.7.5.6(ActiveState 软件公司)
基于 Python 2.7.5(默认,2013 年 9 月 16 日,23:16:52)
[MSC v.1500 32 bit (Intel)] on win32"
【问题讨论】:
-
你为什么要使用那种语法?
-
因为我想使用通用广播。如果我不知道子网掩码和子网地址。例如,在我的情况下,掩码是 255.255.255.0,子网是 192.168.1.0。但是如果掩码是 255.255.0.0,子网是 192.168.0.0,广播应该是 192.168.255.255。这种语法在文档中描述,所以我认为它应该可以工作。还是没有?
-
我认为这只是一个占位符,意味着它是对用户的练习。我不记得如何获得位掩码,但是当你得到它时,你会明智地将它和/或它转换为主机 IP 地址。