当前位置: 首页 > news >正文

【Python】【应用】Python应用之如何操作WiFi之一——使用pywifi

  • 🐚作者简介:花神庙码农(专注于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/

如本文对你有些许帮助,欢迎大佬支持我一下,您的支持是我持续创作的不竭动力
支持我的方式

http://www.lryc.cn/news/349134.html

相关文章:

  • 2024OD机试卷-分割均衡字符串 (java\python\c++)
  • 完整版解答!2024年数维杯数学建模挑战赛B题
  • Android开发,日志级别
  • Docker 部署 MySQL 数据库
  • 代码技巧: 类中同一个函数可以同时存在常函数版本和普通函数版本(c++)
  • 2024OD机试卷-转盘寿司 (java\python\c++)
  • MongoDB创建或删除用户并验证数据库权限
  • 半小时搞懂STM32面经知识——RCC
  • 汇聚荣科技:拼多多开店没有流量应该怎么办?
  • uni-app(三):离线打包与插件引用(Android)
  • 数据分析——对比思维、A/B test
  • 深度探索Java工厂模式:创新与灵活性的结合
  • delphi6直连redis服务(用lua脚本redis模块)
  • 嵌入式Linux:编译和使用Protobuf库
  • 导航app为什么知道还有几秒变绿灯?
  • 设计模式 六大原则之单一职责原则
  • DOM重点核心(注册事件+DOM事件流)
  • 浅谈操作系统中的重要概念——线程(3)——设计模式
  • nginx配置域名与IP访问服务冲突问题
  • 2024OD机试卷-字符串序列判定 (java\python\c++)
  • 7-128 最长公共子串
  • 【瑞萨RA6M3】2. UART 实验
  • js遇到需要正则匹配来修改img标签+清除行内样式
  • Vue学习v-if与v-else-if
  • linux进阶高级配置,你需要知道的有哪些2-firewalld防火墙(一)
  • Centos 中如何汉化man命令
  • 原生小程序开发如何使用 tailwindcss
  • spring alibaba中的seata分布式事务
  • MQTT学习(二)
  • 入职Java,不会git被开除了。。。