当前位置: 首页 > 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/

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

相关文章:

【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&#xff0c;并用命令行工具mongosh演示。 一、创建用户并设置数据库权限 用户和数据库是关联的&#xff0c;要在登录时验证某个数据库&#xff0c;需要在相应的数据库内创建用户&#xff0c;即先切换到该数据库再创建用户。除非是root最高权…...

半小时搞懂STM32面经知识——RCC

1. 时钟的概念 时钟是由电路产生的具有周期性的脉冲信号&#xff0c;相当于单片机的心脏&#xff0c;要想使用单片机的外设必须开启时钟。 时钟对单片机有什么作用&#xff1f; 1. 驱动外设的本质是寄存器&#xff0c;而寄存器需要时钟触发才能改写值。 2. 时钟频率越高&#…...

汇聚荣科技:拼多多开店没有流量应该怎么办?

拼多多开店没有流量是一个常见的问题&#xff0c;许多新手商家都会遇到这样的困境。那么&#xff0c;如何解决这个问题呢?下面从四个方面进行详细阐述。 一、优化店铺和商品 首先&#xff0c;要确保店铺和商品的质量。店铺要有自己独特的风格和特色&#xff0c;商品要有高质量…...

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

对比分析 数据大小 &#xff1a;与中值、平均值、目标值、标准做对比数据波动&#xff1a;变异系数、方差、标准差数据趋势&#xff1a;时间维度和空间维度 其中 时间维度 横向比较&#xff08;连续7天每天的销售量&#xff09; 纵向比较&#xff08;同一时期不同品类对比&…...

深度探索Java工厂模式:创新与灵活性的结合

在软件设计中&#xff0c;有效地组织对象的创建过程是至关重要的。Java工厂模式是一种优秀的设计模式&#xff0c;它能够在对象创建的过程中提供更大的灵活性和可扩展性。本文将深入探讨工厂模式的不同实现方式&#xff0c;并提供详细的代码示例&#xff0c;以帮助读者更好地理…...

delphi6直连redis服务(用lua脚本redis模块)

一、创建一个exe程序 创建一个exe程序&#xff0c;引用LuaRedis.pas单元&#xff08;此单元自己封装的代码&#xff0c;目前主要封装了获取key和设置key/value功能&#xff09;&#xff0c;代码如下&#xff1a; unit Unit1;interfaceusesWindows, Messages, SysUtils, Variant…...

嵌入式Linux:编译和使用Protobuf库

目录 1、开发环境和工具 2、安装和编译Protobuf、Protobuf-C库 3、编写和编译proto文件 4、修改makefile文件 5、测试示例 6、参考资料 Protobuf&#xff08;Protocol Buffers&#xff09;是由 Google 开发的一种轻量级、高效的结构化数据序列化方式&#xff0c;用于在不同应用…...

导航app为什么知道还有几秒变绿灯?

在使用地图导航app行驶至信号灯的交叉路口时&#xff0c;这些应用程序会贴心地告知用户距信号灯变化还有多少秒&#xff0c;无论是即将转为绿灯还是红灯。这一智能化提示不仅使得驾驶员能适时做好起步或刹车的准备&#xff0c;有效缓解了因等待时间不确定而产生的焦虑情绪&…...

设计模式 六大原则之单一职责原则

文章目录 概述代码例子小结 概述 先看下定义吧&#xff0c;如下&#xff1a; 单一职责原则的定义描述非常简单&#xff0c;也不难理解。一个类只负责完成一个职责或者功能。也就是说在类的设计中&#xff0c; 我们不要设计大而全的类,而是要设计粒度小、功能单一的类。 代码例…...

DOM重点核心(注册事件+DOM事件流)

目录 1.注册事件 注册时间概述 addEventListener() 删除事件 2.DOM事件流 DOM事件流理论 事件对象 事件对象的常见属性和方法 e.targe 和 this的区别 阻止默认行为 阻止冒泡 事件委托 禁止右键菜单和禁止选中文字 获得鼠标的坐标&#xff08;可视区、页面、浏览器…...

浅谈操作系统中的重要概念——线程(3)——设计模式

文章目录 一、什么是设计模式&#xff1f;二、单例模式2.1、饿汉模式2.2、懒汉模式2.3、多线程情况下调用 饿汉模式与懒汉模式 谁是安全的&#xff1f;&#xff1f;&#xff08;重点&#xff09; 三、工厂模式3.1、什么是工厂模式&#xff1f;3.1.1、构造方法存在的缺陷3.1.1.1…...

nginx配置域名与IP访问服务冲突问题

在最近的一次开发中遇到一个问题&#xff0c;我在云服务器上部署了两个服务&#xff0c;A服务和B服务&#xff0c; A服务在服务器中用的端口是80端口&#xff0c;所以我在浏览器访问的地址就是 B服务在服务器中用的是9818端口&#xff0c;所以我在浏览器访问的是 现在我给B服务…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...