This article was last updated on <span id="expire-date"></span> days ago, the information described in the article may be outdated.
前言
其实我很久之前就想用 Python 来控制 Linux 的 WiFi 了。由于 Linux 基本都是用 wpa 来连接 WiFi 的 (iwd 也挺好用的),所以控制了 wpa (以下我就这么简称了) 就能控制 WiFi。
我以前在 Ubuntu 上试过 pywifi,Windows 上是可以正常工作的,但是我的 Ubuntu 就不行。由于是大一时候的事情了,我也就懒得再深究原因。最近几个月断断续续的在 Github 和 Google 上找了好久,都没有搜索到符合我要求的包:
- 使用 wpa 的官方接口
于是我就索性自己写了一个。
简介
Cpywpa,名称取自 Cython 与 wpa 的缩写,表示着这个包是使用 Cython 编写的。Cpywpa 是一个用来控制 wifi 的 Python 包,它突出的特点是使用 wpa 官方提供的 C 接口进行通讯,而不是使用 d-Bus 或者另外自定义的 socket 接口。
包的底层与 wpa 通讯的部分是使用 C 语言写的 (wpa 官方什么时候出 Python 的接口呀),然后用 Cython 对其包装,封装成一个 Cython 扩展类,这样就达到了在 Python 中使用官方接口的目的。
安装
题外话
考虑到跨平台,我仅往 pypi 上传了项目的源码,但是之后我发现,pypi 似乎帮我编译好了对应平台的二进制安装包。所以,以下的依赖库中 Cython 并不是必须的,在将来我会考虑将 Cython 从项目的依赖库中移除。
正题
直接从 pypi 安装即可,需要的依赖库会被自动安装,当然这些库只在安装过程中会用到,安装完成以后不想要的可以删掉。
1 | pip install Cpywpa |
使用
Cpywpa 中有我写好的一个 NetworkManager 类,直接使用即可。
- 获取当前网络状态
1 | from Cpywpa import NetworkManager |
- 列出已知的网络
1 | from Cpywpa import NetworkManager |
- 扫描周围的网络并返回结果
1 | from Cpywpa import NetworkManager |
- 连接到一个网络
1 | from Cpywpa import NetworkManager |
- 添加一个网络,但是不连接
1 | from Cpywpa import NetworkManager |
- 删除一个保存的网络
1 | from Cpywpa import NetworkManager |
使用 cpw_core
cpw_core 是 Cpywpa 中 Cython 的扩展类,提供了很原始的方法来与 wpa 通讯。再原始就变成 C 了
你可以直接定义一个 Python 类来继承 cpw_core,这样你就可以使用 cpw_core 中的函数了。
1 | from Cpywpa.ccore import cpw_core |
下面是 cpw_core 中能够使用的函数
1 | # cpw_core funtions |
最后的结尾
如果你不小心从搜索引擎中找到了这里,又不小心喜欢上了我写的项目,麻烦给个 ⭐star 呗 😋
Author: Syize
Permalink: https://blog.syize.cn/2022/01/30/Cpywpa/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Syizeのblog!
Comments