- 🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)
- 🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd
- 🌐系列专栏:Python应用
- 📰如觉得博主文章写的不错或对你有所帮助的话,还望大家三连支持一下呀!!! 👉关注✨、点赞👍、收藏📂、评论。
- 如需转载请参考转载须知!!
【Python】【应用】Python应用之如何操作WiFi之一——使用pywifi
- 简介
- 常量定义
- 接口状态
- 认证算法
- 密钥管理类型
- 加密类型
- 关键模块
- 配置文件
- 接口
- 获取接口信息
- 获取接口名字
- 触发接口扫描周边AP
- 获取上一次触发扫描的结果。
- 添加AP配置文件以供以后连接。
- 删除所有AP配置文件。
- 通过返回Profile列表以获取所有保存的AP配置文件
- 通过给定的profile连接到指定的AP。
- 断开当前AP连接。
- 获取当前状态的状态。
- 示例
- 参考资料
简介
- pywifi提供了一个跨平台的Python模块来操作无线接口,可以对wifi进行扫描、连接与断开等操作。
– 易于使用;
– 支持Windows和Linux; - pywifi的环境要求:
– 对于Linux系统,需要运行wpa_supplicant来操作wifi设备,然后pywifi可以通过套接字与wpa_supplicant通信。
– 对于Windows系统,高于Windows XP SP2版本的Windows版本,自带的原生WiFi组件即可。 - 本文整理了pywifi的基础知识及其使用方法。
常量定义
接口状态
- Interface.status() 会返回以下状态码之一,值分别为0~4:
const.IFACE_DISCONNECTED
const.IFACE_SCANNING
const.IFACE_INACTIVE
const.IFACE_CONNECTING
const.IFACE_CONNECTED
认证算法
- 认证算法应分配给profile,正常情况下都设置为’open’方式:
const.AUTH_ALG_OPEN
const.AUTH_ALG_SHARED
密钥管理类型
- 密钥管理类型,也要分配给profile。
- AP不同模式对应不同的akm设置,可以注意到,不支持WPA3方式。
AP模式 | profile.akm |
---|---|
无安全设置 | AKM_TYPE_NONE |
WPA模式, | AKM_TYUPE_WPAPSK |
WPA2模式 | AKM_TYUPE_WPA2PSK |
const.AKM_TYPE_NONE
const.AKM_TYPE_WPA # WPA-Enterprise
const.AKM_TYPE_WPAPSK
const.AKM_TYPE_WPA2 # WPA2-Enterprise
const.AKM_TYPE_WPA2PSK
- 注:WPA包含了802.1X的身份认证和加密,主要分为两种:WPA-Personal (WPA PSK) 和WPA-Enterprise,
加密类型
- 如果akm不是AKM_TYPE_NONE,则应将加密类型设置到Profile。具体可以参考要连接的AP的设置。
const.CIPHER_TYPE_NONE
const.CIPHER_TYPE_WEP
const.CIPHER_TYPE_TKIP
const.CIPHER_TYPE_CCMP
const.CIPHER_TYPE_UNKNOWN
关键模块
配置文件
- 配置文件是我们想要连接的AP的设置。配置文件的字段如下:
ssid:AP的ssid
auth:AP的认证算法
akm:AP的密钥类型
cipher:AP的密码类型
key:AP的密钥,可选字段。如果加密类型非CIPHER_TYPE_NONE,则应该设置该密钥。
接口
- 接口是指用于执行Wi-Fi操作(如扫描、连接、断开连接等)所使用的Wi-Fi接口,实际对应的是笔记本的无线网卡。
获取接口信息
通常,平台中只有一个Wi-Fi接口,此时,可使用索引0获得Wi-Fi接口。
import pywifiwifi = pywifi.PyWiFi()
iface = wifi.interfaces()[0]
获取接口名字
Interface.name()
触发接口扫描周边AP
Interface.scan()
获取上一次触发扫描的结果。
Interface.scan_results()
将返回一个Profile 列表。
- 注: 因每个WiFi接口的扫描时间不同,因此,在scan后过几秒再调用scan_results()会更合适些。
添加AP配置文件以供以后连接。
Interface.add_network_profile(profile)
删除所有AP配置文件。
Interface.remove_all_network_profiles()
通过返回Profile列表以获取所有保存的AP配置文件
Interface.network_profiles()
通过给定的profile连接到指定的AP。
Interface.connect(profile)
- 注: 基于目前的设计, add_network_profile(profile) 应在connect(profile) 之前被调用。
断开当前AP连接。
Interface.disconnect()
获取当前状态的状态。
Interface.status()
示例
- 一个操作示例如下:
import pywifiprofile = pywifi.Profile()
profile.ssid = 'qxhgd'
profile.auth = const.AUTH_ALG_OPEN
profile.akm.append(const.AKM_TYPE_WPA2PSK)
profile.cipher = const.CIPHER_TYPE_CCMP
profile.key = 'qxhgd'wifi = pywifi.PyWiFi()
iface = wifi.interfaces()[0]
profile = iface.add_network_profile(profile)
iface.connect(profile)
参考资料
- https://pypi.org/project/pywifi/
- https://github.com/awkman/pywifi/
如本文对你有些许帮助,欢迎大佬支持我一下,您的支持是我持续创作的不竭动力
支持我的方式