文章目录
- 杂
- 资源
- 餐前准备
- 调用关系
- 代码结构
杂
写这个软件的原因是因为家里的路由器HS8145v支持2.4G和5G双频
但是却不支持自动切换,太浪费了
硬件不够软件来凑呗
先贴几张效果图
wifi0是5G频段的SSID,wifi1是2.4G的
资源
查看源码请戳GayHub
exe下载请戳网盘 提取码nhry
餐前准备
pip install 第三方库
pywifi # 实现AP扫描、AP接入等wifi相关
psutil # 统计当前网速
需要注意的是pywifi的_wifiutil_win.py
要稍作修改
虽然现在还是不支持接入中文SSID,但如果附近有中文SSID的AP起码不会报编码错误了,只是显示乱码
调用关系
代码结构
connect_to_wifi.py
直接调用pywifi库
wireless_card_scan 用于扫描本机网卡
wifi_scan 扫描附近的可接入点
add_avail_wifi 用于添加可用wifi的SSID和密码,可以保存到本地json文件中
connect_to 用于连接到指定wifi
quality_assessment.py
基于Ping命令检测当前网络的平均延迟和丢包率
get_quality 用于ping指定网址或IP并返回ping的结果
data_wash 用正则对ping的结果作数据清洗,提取出int型的平均延迟和丢包率
此处有处理的不太好的地方
因为直接ping只能发四个包
如果用-c参数需要提供管理员权限
权衡了一下还是选了直接ping
不是写不了
而是要管理权限实在太可疑了
speed_assessment.py
检测当前的网速
get_speed_per_deci 计算0.1秒内的网速
calculate_average_speed(seconds) 返回seconds秒内的平均网速
其实网速这个属性意义不是很大,受影响的因素太多了
所以只起一个参考作用
wifi_changer.py
对底层三个模块提供的大多数方法进行了封装
change_and_test_wifi 切换wifi后更新其网速和平均延迟、丢包率
only_test_wifi 不需切换时持续更新当前网络的网速、平均延迟、丢包率
max_retry_connect 对指定接入点进行连接,最多重试x次,失败则结束
init_constants.py
初始化各种常量
reload_json 如果运行时发现常量设置有误可以打开文件重新修改,输入reload可重新读取
init_constants 封装了reload_json方法,最终返回dict型的所有常量键值对
the_main.py
主方法
首先读入配置的常量
然后扫描本机网卡
扫描附近接入点
建立可用wifi组
输入wifi密码
遍历所有wifi
多关键字排序选择当前的最优wifi
while True:
持续更新其网速、延迟、丢包率等属性
如果发现需要切换
则切换到次优的wifi
更新其网速、延迟、丢包率等属性
对所有的可用wifi重新排序
如果无需切换
则程序休眠一段时间
更多推荐
Python技能包:基于Ping命令实现wifi的质量监测及自动切换
发布评论