【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.mzph.cn/bicheng/12300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux修炼之路之yum和vim编辑器

目录 一:Linux软件包管理器yum 二:vim编辑器 vim的三种模式及互相转换 命令模式 底行模式 三:普通用户的sudo指令(修改信任名单) 接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 一&#xff1a…

我眼中的IT行业现状与未来趋势

我眼中的IT行业现状与未来趋势 *随着技术的不断进步,IT行业已成为推动全球经济和社会发展的关键力量。从云计算、大数据、人工智能到物联网、5G通信和区块链,这些技术正在重塑我们的生活和工作方式。 一、技术革新与行业应用 当前IT行业的技术革新涵盖…

c++编程(11)——string类的模拟实现

欢迎来到博主的专栏——c编程 博主ID:代码小豪 文章目录 前言string类的模拟实现string的成员对象构造、赋值、析构访问成员对象的接口访问字符串中的元素迭代器对字符序列的插入、删除元素操作mystring类的相关操作 mystring类的所有模拟实现以及测试案例 前言 本…

【已解决】 ‘Conv2d’ object has no attribute ‘register_full_backward_hook’

😎 作者介绍:我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun,视频号:AI-行者Sun 🎈 本文专栏:本文收录于《AI实战中的各种bug…

(四十二)第 6 章 树和二叉树(树的二叉链表(孩子-兄弟)存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

centos7中如何优雅的动态切换jdk版本?

在 CentOS 7 中动态切换 JDK 版本可以通过多种方法实现&#xff0c;其中最常见的方法是使用 alternatives 命令&#xff0c;这是 CentOS 和其他基于 Red Hat 的系统中用于管理多个软件版本的标准工具。下面我会详细介绍如何使用 alternatives 命令来切换 JDK 版本。 步骤 1: 安…

【JS面试题】this

this取什么值&#xff0c;是在函数执行的时候确定的&#xff0c;不是在函数定义的时候确定的&#xff01; this的6种使用场景&#xff1a; ① 在普通函数中使用&#xff1a;返回window对象 ② 使用call apply bind 调用&#xff1a;绑定的是哪个对象就返回哪个对象 ③ 在对象…

怎样计算Excel一列数值中十位数为5的个数?

有一列数字&#xff0c;可能正数也可能是负数&#xff0c;有可能有小数&#xff0c;要怎么计算这列数字中十位数为5的数量有多少个&#xff1f; 一、按示例情况&#xff0c;数字均为整数 公式如下&#xff1a; SUM(--(MID(A1:A6,LEN(A1:A6)-1,1)"5")) 数组公式&a…

一台linux通过另一台linux访问互联网-TinyProxy

参考&#xff1a; https://blog.csdn.net/weixin_41831919/article/details/113061317https://www.yuncongz.com/archives/1.htmlhttps://blog.csdn.net/aoc68397/article/details/101893369 环境&#xff1a;ubuntu 18.04 机器1: IP 219.216.65.252 (可以访问外网) 机器2: IP…

【C++语言】动态内存管理

文章目录 前言内存管理数据存储位置C语言动态内存管理方式C动态内存管理方式&#xff1a;new/deleteoperator new与operator delete函数new和delete的实现原理定位new表达式&#xff08;了解&#xff09;常见面试题 总结C语言系列学习目录 前言 本章要介绍的是动态内存管理&am…

学习神经网络基础架构

今日学习了解了常见的几种神经网络基础架构。 1.卷积神经网络 卷积神经网络CNN是一种人工神经网络&#xff0c;旨在处理和分析具有网格状拓扑结构的数据&#xff0c;如图像和视频。将 CNN 想象成一个多层过滤器&#xff0c;可处理图像以提取有意义的特征并进行推理预测。 想…

考研经验分享

1、自我介绍 我是医信2001班的杨鑫&#xff0c;初始成绩334分&#xff0c;其中政治&#xff1a;59分、英语&#xff1a;64分、数学&#xff1a;116分、计算机专业基础408&#xff1a;95分&#xff0c;在本科期间的获奖经历如下&#xff1a; 蓝桥杯程序设计竞赛浙江省一等奖、全…

PG数据文件和块管理与Oracle比较

之前有说过PG数据库中的对象oid与数据文件一一对应&#xff0c;创建的数据库如果没有指定表空间&#xff0c;则会默认放在默认表空间中&#xff0c;例如&#xff1a; 1.对象OID与数据文件对应关系 Oracle的逻辑与物理对应关系如下&#xff1a; 两种结果相比较而言&#xff1a; …

C语言基础-类型转换规则

在C语言中&#xff0c;类型转换&#xff08;或称为类型强制转换&#xff09;是一种机制&#xff0c;它允许我们将一个数据类型的值转换为另一个数据类型的值。这种转换可以是隐式的&#xff08;由编译器自动执行&#xff09;&#xff0c;也可以是显式的&#xff08;由程序员明确…

升级到delphi 12 时,以前版本app编译后不能正常运行的原因

AndroidManifest.xml文件中权限行是 <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion"32" /> <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE" andro…

赋能业务全球化,明道云HAP通过亚马逊云科技 FTR认证

近日&#xff0c;明道云作为融合多元能力的超级应用平台&#xff0c;成功通过了AWS&#xff08;Amazon Web Service&#xff09;的FTR&#xff08;Foundational Technical Review&#xff09;认证。FTR是亚马逊云科技为合作伙伴解决方案提供的一项全面技术审核机制&#xff0c;…

Python 操作数据库

十、Python3 操作数据库 1、Python3 操作 MySQL 1、基本介绍 Python3 操作 MySQL 数据库 可以使用的模块是 pymysql 和 MySQLdb。 这个两个模块都是通过自己的 API 执行原生的 SQL 语句实现的。 MySQLdb 是最早出现的一个操作 MySQL 数据库的模块&#xff0c;核心由C语言编…

Builder建造者模式

Builder是内部类&#xff0c;用来构造类。 Builder的作用就是&#xff1a;默认属性代替设置属性&#xff0c;清晰代码意图。 构造方法中只设置必须参数&#xff08;可以设置为final&#xff09;&#xff0c;在构造后再set可选初始化数据&#xff0c;每一个set返回一个Builder&…

【NodeMCU实时天气时钟温湿度项目 7】和风天气API返回JSON数据信息的解压缩实现——ArduinoUZlib功能库

今天是第七专题&#xff0c;主要内容是&#xff1a;导入ArduinoUZlib功能库&#xff0c;借助该库把从【和风天气】官网返回的经过Gzip压缩的JSON数据&#xff0c;进行解压缩和t解析&#xff0c;在串口监视器上输出解析后的JSON信息。 如您需要了解其它专题的内容&#xff0c;请…

C++:编程世界的永恒之石

在编程的广袤领域中&#xff0c;C犹如一块永恒的基石&#xff0c;历经岁月的洗礼&#xff0c;依旧坚固而璀璨。它的深厚底蕴、强大功能和广泛的应用领域&#xff0c;使其成为无数程序员心中的信仰与追求。 一、C&#xff1a;历史与传承的交汇点 C的历史可追溯到上世纪80年代&…