折腾一下自动连接校园网

因为每次开电脑都要按一下回车连校园网,像我这么懒的人肯定是不想自己连的,于是打算写一个自动连接的脚本。期间踩的坑是真的很多啊。

说实话折腾半天现在笔者很困,但是怕一觉醒来踩的坑都忘了,还是赶紧记下来,逻辑混乱见谅。

抓包获取POST请求

要连接校园网,首先要知道按下回车键发生了什么。当连接到学校的开放WIFI或者有线连接时,电脑会尝试连接msftconnecttest.com/redirect来测试能不能连接到网络。因为需要认证,所以网页会被重定向到认证服务器10.10.9.9/….,账号密码是预先填好的,不需要手动输入,猜测可能是网站cookie。多提一句这个加密的密码和明文密码明显长度不一样啊。

校园网认证的网页

F12后打开网络,刷新试图抓包,但是看到一个POST请求一闪而过随后网站跳转到认证成功页面,试了几次都看不到那个请求,突然发现有一个节流模式的功能,设为离线之后就可以截获post请求(因为发不出去也就不会重定向)

F12看POST请求

后来我才发现这个请求直接复制为powershell格式就可以直接运行,但当时我并没有发现,搞了一大坨东西扔给chatgpt分析,让他给我写了个curl命令出来,打算用python写个定时程序。

计划任务+脚本

pws中的curl是另一个命令的alias,我还专门又装了一个正经的curl

原计划使用python写个定时程序,但是转念一想,直接用bat脚本不就行了吗?正好windows还自带一个计划任务的工具。

于是直接把curl命令复制进去,执行失败,因为pws有curl这个命令了,真正的curl语法反而不认识了。

于是换用cmd,还是报错,因为cmd不能识别\这样的换行。

于是把命令改为一行,可以成功执行,可以正常上网。

1
{"userIndex":"xxxxxxxxxxx","result":"success","message":"","forwordurl":null,"keepaliveInterval":0,"casFailErrString":null,"validCodeUrl":""}

但诡异的事情来了,cmd中正常执行的命令换到bat脚本之后就报错,

1
{"userIndex":null,"result":"fail","message":"WEB认证设备未注册,请确认SAM+/portal/设备上的参数配置是否一致","forwordurl":null,"keepaliveInterval":0,"casFailErrString":null,"validCodeUrl":""}

网上说有可能是转义问题,要把“改为^”,但没什么效果,折腾半天还是报错,有点崩溃。

PS1脚本不能执行

就在这时候我突然发现这个请求可以直接复制成pws格式,那就很舒服了,pws中正常执行,写了一个ps1脚本也可以正常运行。这里我其实知道ps1默认是不允许运行的,但我右键运行似乎在豁免范围外可以直接运行,我就以为没有这个限制。

Windows任务计划程序

在计划任务里添加了任务,触发器设为解锁时,操作是执行powershell脚本加上你的脚本路径,当且仅当连接到指定的网络时执行。这里还踩了几次坑。第一次是直接路径写ps1脚本路径,结果无效。后来改成启动C:\Windows\SysWOW64\WindowsPowerShell\v1.0\PowerShell.exe,参数写-NonInteractive "ps1脚本路径",但仍然报错,而且终端一闪而过我都不知道报错是什么……我的解决方法是:打开obs录屏看看报错是什么……朴实无华的方法。结果提示是系统不允许执行ps1脚本,我这才去把限制解了(这个直接网上搜一下就有),但仍然报一样的错。后来看到有人有一样的问题,说是直接写powershell就行了,真是很莫名其妙又很诡异的错误。

完结

以上完结,折腾了一个多小时。目前实现的就是每次打开电脑自动执行脚本,之后就可以直接上网了。虽然每次解锁会弹个终端但我也懒得把他隐藏了,要不然时间长了我都忘了有这个脚本,可能以后出什么问题我都不知道去哪找。