Python无法使用< broadcast>发送广播包。地址 [英] Python can't send a broadcast package with <broadcast> address

查看:242
本文介绍了Python无法使用< broadcast>发送广播包。地址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下一个代码发送广播包(在本地Wireshark中签入):

The next code sends broadcast package (checked in local 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 ))

但是当我在尖括号中写广播而不是恒定的子网广播时,该包没有被发送:

But when I write "broadcast" in angle brackets instead of constant subnet broadcast, the package is not being sent:

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)]

ActivePython 2.7.5.6 (ActiveState Software Inc.)
based on Python 2.7.5 (default, Sep 16 2013, 23:16:52)
[MSC v.1500 32 bit (Intel)] on win32"


推荐答案

Python支持'< broadcast>',请参见套接字-低级网络接口

Python supports '<broadcast>', see socket — Low-level networking interface

但是,您可以获得网络设备的广播掩码使用 ipaddress

However, you can get broadcast mask of your network device using ipaddress package

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)

这篇关于Python无法使用&lt; broadcast&gt;发送广播包。地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆