【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/
如本文对你有些许帮助,欢迎大佬支持我一下,您的支持是我持续创作的不竭动力
支持我的方式
相关文章:
【Python】【应用】Python应用之如何操作WiFi之一——使用pywifi
🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:Python应用&…...
2024OD机试卷-分割均衡字符串 (java\python\c++)
题目:分割均衡字符串 题目描述 均衡串定义: 字符串 中只包含两种字符,且这两种字符的个数相同。 给定一个均衡字符串,请给出可分割成新的均衡子串的最大个数。 约定:字符串中只包含大写的 X 和 Y 两种字符。 输入描述 字符串的长度:[2, 10000]。 给定的字符串均为均…...
完整版解答!2024年数维杯数学建模挑战赛B题
B题 生物质和煤共热解问题的研究 技术文档第一问1.1问题一分析1.2数据预处理1.3问题一Spearman相关性分析 数据代码资料获取 技术文档 第一问 1.1问题一分析 对于问题一,题目要求分析出正己烷不溶物对焦油产率、水产率、焦渣产率这三个指标是否有显著影响&#x…...
Android开发,日志级别
5个日志级别 Verbose (VERBOSE): 这是最低的日志级别,用于输出最为详尽的信息,包括开发和调试过程中的各种细节。在Log类中对应的方法是Log.v()。Debug (DEBUG): 此级别用于输出调试信息,帮助开发者理解程序运行流程或状态。通过Log.d()方法…...
Docker 部署 MySQL 数据库
文章目录 MySQL 镜像创建缩主机目录my.cnf 配置文件docker-compose.yml给 Test 账号添加权限 Docker 与 docker-compose 安装这里不做介绍。 MySQL 镜像 根据需要选择版本 # 5.7 版本 docker pull mysql:5.7 # 8.2 版本 docker pull mysql:8.2创建缩主机目录 cd home # 创建…...
代码技巧: 类中同一个函数可以同时存在常函数版本和普通函数版本(c++)
在类中如果我们希望在常函数中修改某属性的值可以使用mutable来实现。 如果有下面的场景,假设我们有一个函数hobby()需要在非const的对象调用的时候,应该去修改内部的属性,在const修饰的对象调用的时候可以满足不修改内部的属性。 鉴于上面的…...
2024OD机试卷-转盘寿司 (java\python\c++)
题目:转盘寿司 题目描述 寿司店周年庆,正在举办 优惠活动 回馈新老客户。 寿司转盘上总共有 n 盘寿司,prices[i] 是第 i 盘寿司的价格, 如果客户选择了第 i 盘寿司,寿司店免费赠送客户距离第 i 盘寿司最近的下一盘寿司 j,前提是 prices[j] < prices[i],如果没有满足…...
MongoDB创建或删除用户并验证数据库权限
本文假设在Ubuntu中安装了MongoDB,并用命令行工具mongosh演示。 一、创建用户并设置数据库权限 用户和数据库是关联的,要在登录时验证某个数据库,需要在相应的数据库内创建用户,即先切换到该数据库再创建用户。除非是root最高权…...
半小时搞懂STM32面经知识——RCC
1. 时钟的概念 时钟是由电路产生的具有周期性的脉冲信号,相当于单片机的心脏,要想使用单片机的外设必须开启时钟。 时钟对单片机有什么作用? 1. 驱动外设的本质是寄存器,而寄存器需要时钟触发才能改写值。 2. 时钟频率越高&#…...
汇聚荣科技:拼多多开店没有流量应该怎么办?
拼多多开店没有流量是一个常见的问题,许多新手商家都会遇到这样的困境。那么,如何解决这个问题呢?下面从四个方面进行详细阐述。 一、优化店铺和商品 首先,要确保店铺和商品的质量。店铺要有自己独特的风格和特色,商品要有高质量…...
uni-app(三):离线打包与插件引用(Android)
离线打包与插件引用 1.下载Android离线SDK2.使用Android Studio打开离线打包项目并更新Gradle3.解决报错4.构建5.配置AppKeya.查看证书b.申请AppKeyc.配置AppKey 6.生成本地打包App资源7.拷贝App资源到Android项目中8.修改 appid9.修改Android项目配置文件10.下载证书并配置11.…...
数据分析——对比思维、A/B test
对比分析 数据大小 :与中值、平均值、目标值、标准做对比数据波动:变异系数、方差、标准差数据趋势:时间维度和空间维度 其中 时间维度 横向比较(连续7天每天的销售量) 纵向比较(同一时期不同品类对比&…...
深度探索Java工厂模式:创新与灵活性的结合
在软件设计中,有效地组织对象的创建过程是至关重要的。Java工厂模式是一种优秀的设计模式,它能够在对象创建的过程中提供更大的灵活性和可扩展性。本文将深入探讨工厂模式的不同实现方式,并提供详细的代码示例,以帮助读者更好地理…...
delphi6直连redis服务(用lua脚本redis模块)
一、创建一个exe程序 创建一个exe程序,引用LuaRedis.pas单元(此单元自己封装的代码,目前主要封装了获取key和设置key/value功能),代码如下: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variant…...
嵌入式Linux:编译和使用Protobuf库
目录 1、开发环境和工具 2、安装和编译Protobuf、Protobuf-C库 3、编写和编译proto文件 4、修改makefile文件 5、测试示例 6、参考资料 Protobuf(Protocol Buffers)是由 Google 开发的一种轻量级、高效的结构化数据序列化方式,用于在不同应用…...
导航app为什么知道还有几秒变绿灯?
在使用地图导航app行驶至信号灯的交叉路口时,这些应用程序会贴心地告知用户距信号灯变化还有多少秒,无论是即将转为绿灯还是红灯。这一智能化提示不仅使得驾驶员能适时做好起步或刹车的准备,有效缓解了因等待时间不确定而产生的焦虑情绪&…...
设计模式 六大原则之单一职责原则
文章目录 概述代码例子小结 概述 先看下定义吧,如下: 单一职责原则的定义描述非常简单,也不难理解。一个类只负责完成一个职责或者功能。也就是说在类的设计中, 我们不要设计大而全的类,而是要设计粒度小、功能单一的类。 代码例…...
DOM重点核心(注册事件+DOM事件流)
目录 1.注册事件 注册时间概述 addEventListener() 删除事件 2.DOM事件流 DOM事件流理论 事件对象 事件对象的常见属性和方法 e.targe 和 this的区别 阻止默认行为 阻止冒泡 事件委托 禁止右键菜单和禁止选中文字 获得鼠标的坐标(可视区、页面、浏览器…...
浅谈操作系统中的重要概念——线程(3)——设计模式
文章目录 一、什么是设计模式?二、单例模式2.1、饿汉模式2.2、懒汉模式2.3、多线程情况下调用 饿汉模式与懒汉模式 谁是安全的??(重点) 三、工厂模式3.1、什么是工厂模式?3.1.1、构造方法存在的缺陷3.1.1.1…...
nginx配置域名与IP访问服务冲突问题
在最近的一次开发中遇到一个问题,我在云服务器上部署了两个服务,A服务和B服务, A服务在服务器中用的端口是80端口,所以我在浏览器访问的地址就是 B服务在服务器中用的是9818端口,所以我在浏览器访问的是 现在我给B服务…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
