pywifi 控制wifi

前言

  1. 命令行输入: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
    
  2. 命令行输入: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
    
        承载网络状态  : 不可用
    
  3. 命令行输入:netsh interface set interface WLAN disabled 关闭wifi

  4. 命令行输入: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

​ 基本不会用到,源码也未说明。

bssidMAC地址

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]
  1. PyWiFi

    是模块包含的一个类,提供操作方法来操作wlan设备

  2. 类方法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())				# 获取接口连接状态
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

此间风月不及君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值