Python技能包:基于Ping命令实现wifi的质量监测及自动切换

写这个软件的原因是因为家里的路由器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重新排序
	如果无需切换
		则程序休眠一段时间
发布了61 篇原创文章 · 获赞 11 · 访问量 4854

猜你喜欢

转载自blog.csdn.net/weixin_43249758/article/details/104219304