[英]Python can't send a broadcast package with <broadcast> address
下一個代碼發送廣播包(在本地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 Software Inc.)
基於Python 2.7.5(默認,2013年9月16日,23:16:52)
[win32上的[MSC v.1500 32 bit(Intel)]]
Python支持'<broadcast>'
,請參見socket —低級網絡接口
但是,您可以使用ipaddress包獲取網絡設備的廣播掩碼。
import ipaddress
import socket
netmask = '255.255.255.0' # Netmask is to decode network and host addresses
ip = socket.gethostbyname(socket.gethostname()) # Obtain your IP address
net = ipaddress.IPv4Network(ip + '/' + netmask, False)
broadcast = str(net.broadcast_address)
print('My broadcast address =', broadcast)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.