前言
-
命令行输入:
netsh wlan show networks mode=bssid可查询到如下信息:接口名称 : WLAN 当前有 1 个网络可见。 SSID 1 : nova 4 Network type: 结构 身份验证: WPA2 - 个人 加密: CCMP BSSID 1: 24:da:33:6a:46:3a 信号: 92% 无线电类型: 802.11n 波段: 2.4 GHz 频道: 11 Bss 负载: 连接的电台:1 频道利用率:0 (0% ) 中可用容量:0 (0 us/s) 基本速率(Mbps: 1 2 5.5 11 其他速率(Mbps): 6 9 12 18 24 36 48 54 -
命令行输入:
netsh wlan show interfaces可查询到如下信息:系统上有 1 个接口: 名称: WLAN 说明: Qualcomm Atheros QCA9377 Wireless Network Adapter GUID: bb8d6c2b-87ff-4435-a033-731a6d972ba4 物理地址: 3c:91:80:43:b0:b1 界面类型: 主要 状态: 已连接 SSID: nova 4 BSSID: 24:da:33:6a:46:3a 网络类型: 结构 无线电类型: 802.11n 身份验证: WPA2 - 个人 密码: CCMP 连接模式: 配置文件 频带: 2.4 GHz 通道: 11 接收速率(Mbps): 72.2 传输速率 (Mbps): 72.2 信号: 92% 配置文件: nova 4 承载网络状态 : 不可用 -
命令行输入:
netsh interface set interface WLAN disabled关闭wifi -
命令行输入:
netsh interface set interface WLAN enabled打开wifi
模块安装 Install
pip install pywifi
pip install comtype
导入 Import
import pywifi
配置 Profile
是指我们所要操作的wifi的一些基本设置
类Profile
模块包含的一个类
类源码
class Profile():
def __init__(self):
self.id = 0
self.auth = AUTH_ALG_OPEN
self.akm = [AKM_TYPE_NONE]
self.cipher = CIPHER_TYPE_NONE
self.ssid = None
self.bssid = None
self.key = None
def process_akm(self):
if len(self.akm) > 1:
self.akm = self.akm[-1:]
从源码可以看出,Profile应包含以下属性:
1. id 和 bssid
基本不会用到,源码也未说明。
bssid:MAC地址
2. auth
认证算法类型。有以下值:
pywifi.const.AUTH_ALG_OPEN == 0 == 'open'
pywifi.const.AUTH_ALG_SHARED == 1 == 'shared'
正常情况下,几乎所有的都设置为'open'。
3. akm
密码管理类型,也即安全类型或身份验证。从源码可以看出akm为一个列表类型,且当含有多个元素时,由于方法process_akm被调用,只会保留列表最后一项。可包含以下值:
pywifi.const.AKM_TYPE_NONE == 0 == 'NONE'
pywifi.const.AKM_TYPE_WPA == 1 == 'WPA'
pywifi.const.AKM_TYPE_WPAPSK == 2 == 'WPAPSK'
pywifi.const.AKM_TYPE_WPA2 == 3 == 'WPA2'
pywifi.const.AKM_TYPE_WPA2PSK == 4 == 'WPA2PSK'
pywifi.const.AKM_TYPE_UNKNOWN == 5 == 'OTHER'
4. cipher
密码类型。如果akm不是'NONE',则cipher需要设置。有以下值:
pywifi.const.CIPHER_TYPE_NONE == 0 == 'NONE'
pywifi.const.CIPHER_TYPE_WEP == 1 == 'WEP'
pywifi.const.CIPHER_TYPE_TKIP == 2 == 'TKIP'
pywifi.const.CIPHER_TYPE_CCMP == 3 == 'AES'
pywifi.const.CIPHER_TYPE_UNKNOWN == 4 == 'UNKNOWN'
5. ssid
wifi名称。
6. key
wifi密码。如果cipher不是‘NONE’,则key需要设置。
设置示例
profile = pywifi.Profile()
profile.ssid = 'testap'
profile.auth = pywifi.const.AUTH_ALG_OPEN
profile.akm.append(pywifi.const.AKM_TYPE_WPA2PSK)
profile.cipher = pywifi.const.CIPHER_TYPE_CCMP
profile.key = '12345678'
接口 Interface
是指用于执行wifi操作的wifi接口
获取接口
wifi = pywifi.PyWiFi()
iface = wifi.interfaces()[0]
-
类
PyWiFi是模块包含的一个类,
提供操作方法来操作wlan设备 -
类方法
interfaces是类里边定义的唯一一个方法,目的是
收集可用的wlan接口,该方法调用的返回结果是接口列表由于,一般情况下系统只有一个wlan接口,所以通过索引返回的接口列表的
[0]来获得接口。
接口信息
1. iface.name()
获取当前wifi接口名称(不是wifi名称)。
2. iface.status()
获取当前wifi接口状态。有以下值:
IFACE_DISCONNECTED == 0
IFACE_SCANNING == 1
IFACE_INACTIVE == 2
IFACE_CONNECTING == 3
IFACE_CONNECTED == 4
接口操作
1. iface.scan()
触发接口扫描wifi。
2. iface.scan_results()
获取上一次扫描获得的结果,返回Profile列表。
由于扫描时间的问题,一般在调用scan()后2~8s 再调用scan_results()更安全。
3. iface.add_network_profile(profile)
添加配置好的wifi Profile到当前电脑接口,为连接做准备。
4. iface.remove_network_profile(profile)
移除电脑中保存的指定的wifi Profile。
5. iface.remove_all_network_profiles()
移除所有电脑保存的wifi Profiles。
6. iface.network_profiles()
获取电脑上保存的所有wifi Profiles(即连接过的wifi),返回Profile列表。
7. iface.connect(profile)
通过指定配置好的Profile连接wifi。在此之前,如果电脑从未连接过该wifi时,必须先调用add_network_profile(profile),把该wifi的Profile添加到电脑保 存的Profile列表中
8. iface.disconnect()
断开当前wifi连接。
如何连接wifi
# 导入模块
import time
import pywifi
# 获取接口
wifi = pywifi.PyWiFi()
iface = wifi.interfaces()[0]
# 指定连接的wifi Profile
profile = pywifi.Profile()
profile.ssid = 'NJMU_WLAN'
profile.auth = pywifi.const.AUTH_ALG_OPEN
profile.akm.append(pywifi.const.AKM_TYPE_NONE)
profile.cipher = pywifi.const.CIPHER_TYPE_NONE
profile.key = None
# 通过Profile连接
iface.disconnect() # 断开当前连接
iface.remove_all_network_profiles() # 清除电脑保存的所有Profile
iface.add_network_profile(profile) # 把指定的Profile添加到电脑
iface.connect(profile) # 通过添加的Profile 连接指定wifi
time.sleep(3) # 休眠3s
print(iface.status()) # 获取接口连接状态
本文详细介绍了如何使用Python PyWiFi库进行Wi-Fi接口的操作,包括安装、配置网络Profile、接口信息查询、扫描、连接及断开Wi-Fi。重点讲解了Profile类的属性设置和接口方法的使用示例。
1万+

被折叠的 条评论
为什么被折叠?



