簡體   English   中英

Python無法使用以下命令發送廣播包 <broadcast> 地址

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM