一背景
PC在连接学校校园网的情况下如果持续一段时间未使用足够多的流量则会掉线,严重影响了电脑不在身边时通过向日葵远程的访问.因此特地写了一个校园网自动重连的小助手.
二获取数据包
连接校园网,进入认证界面,如下图
按F12,点击Network和Preserve log准备抓包
输入账号密码,点击登录,此时会出现一大堆数据包,一般选择第一个
下图中的就是我们写代码时需要用到的数据
编写自动重连脚本(附带日志)
思路: 每隔60s ping一次百度,如果未ping通则断掉当前WIFI(我所在学校每天凌晨2点左右会断网,如果不进行重新连接就算认证成功也没有网),再连接校园网并认证.
Ping www.baidu.com判断当前网络是否可以上网
def Ping(self):
iplist = list()
ip = 'www.baidu.com'
# 这里使用subprocess模块而不使用os模块,因为os模块在打包后执行cmd命令会出现黑色命令框
backinfo = subprocess.call('ping www.baidu.com -n 1', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# print(backinfo)
if backinfo:
print('no')
self.connectFlag = 0
logging.info('网络未连接')
else:
iplist.append(ip)
self.connectFlag = 1
断开当前网络
def disconnect(self): # 断开wifi
# 这里使用subprocess模块而不使用os模块,因为os模块在打包后执行cmd命令会出现黑色命令框
subprocess.call("netsh wlan disconnect", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
连接校园网
def connect_wifi(self, name=None): # 连接wifi
# 这里使用subprocess模块而不使用os模块,因为os模块在打包后执行cmd命令会出现黑色命令框
cmd = "netsh wlan connect name=" + str(name)
subprocess.call(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
自动认证(因为方便后期用户的使用,创建了一个.json的配置文件,通过读字典的方式来获取不同的用户信息)
def connect(self): # 自动认证
myaddr = self.getlocalIP()
userId = self.data["userId"] # 用户名
password = self.data["password"] # 密码
service = self.data["service"]
queryString = "wlanacname%3DAC6805%26nasip%3D172.18.95.254%26wlanuserip%3D" + myaddr +"%26wlanparameter" \
"%3D98%3A3b%3A8f" \
"%3Abd%3A6b%3A72" \
"%26url%3Dhttp%3A" \
"%2F%2Fwww" \
".msftconnecttest" \
".com%2Fredirect" \