我来大学第一年的校园网还是非常垃圾的,跑满只有 1m/s,这个跑满指的是运气非常好的时候,无线的校园网也并没有全覆盖。
大二上学期出去租房了,同学说校园网升级了,三大运营商都有了,也基本全校覆盖了,不过我在外面用不到所以也没啥感觉。
到了上学期因为疫情要上网课,学校的网又小小的升级了一下,我也搬回宿舍了,所以总算体验到了全新的校园网。
真的挺不错的,很容易就能跑到 10m/s,Steam 下载也是如此。但是直到现在我们这栋宿舍楼还没网线,不过每个宿舍都装了 wifi ,也没啥影响。
不过肉中刺的来了,升级后的校园网并没有一个自动连接的客户端,所以你每次开机还得打开浏览器去登陆,虽然不是特别麻烦,但就像一根刺一样让人很不爽。
于是便有了今天这篇文章
校园网登录原理
想要自动化登录校园网自然要搞清楚它是如何请求的,用 Chrome 的 F12 抓了一下,发现登录的时候浏览器发送了一个这样的请求:
这就很爽了啊,没有任何加密,甚至不是 POST 请求,经过拆解,请求长这样:
http://210.29.79.141:801/eportal/?c=Portal&a=login&callback=dr1003&login_method=1&user_account=%%2C1%%2C账号%%40运营商&user_password=密码&wlan_user_ip&wlan_user_ip=本地wifiIP地址&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=3.3.2&v=123
其中运营商:移动cmcc 联通unicom 电信telecom
手机端也是同样的请求方式,只是略有不同:
http://210.29.79.141:801/eportal/?c=Portal&a=login&callback=dr1003&login_method=1&user_account=%2C1%2C账号%40运营商&user_password=密码&wlan_user_ip=本地wifiIP地址&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=3.3.2&v=3654
所以接下来只要把逻辑串起来就好了
电脑端
2020/12/14更新:C语言版客户端
电脑端我写了个客户端,是用 VB 写的(我只会VB),大概长这样
文件在这里下载:https://pan.baidu.com/s/1p1p0vCz4DuihzEszciFAtg 提取码: qahz
因为 VB 过于古老,所以需要你一些依赖文件,文件里的说明都写清楚了,如果你安装依赖以后仍然使用不了,可以试试这个脚本,虽然能用,但没我这个软件优雅。
等我学会了 Java 我一定重新写一个客户端(鬼知道什么时候)
手机端
IOS
先从简单的开始,IOS 的捷径可以轻松实现连接,没啥好讲的,放张图:
演示
Android
Android 当然还是使用 tasker,但是问题就很多了,因为未登录状态下连接校园网 wifi 并不会被系统认定为 “连接” 上了 wifi ,所以在 tasker 把连接上 wifi 作为触发条件是没有用的
并且,因为并没有连接上 WIFI ,如果你的移动数据是开启的状态,那么你发送的请求也并不会发送到校园网,所以为了保证我们能优雅的连接上校园网,Tasker 上的流程应该是这样的:
连上wifi → 回到桌面(因为会自动跳转到登录页面且没有选项关闭)→ 关闭梯子(如果你有的话)→ 关闭移动数据 → 发送登陆请求 → 连接成功 → 开启数据(保证离开校园网后依然有网)→ 开启梯子
前面说了,连接 wifi 并不能作为 tasker 的判断依据,那么如何判断呢?
Log Entry
这是 tasker 新更新的一个功能,直白点讲就是系统无论执行什么都会有个日志去记录,而 tasker 就是通过这个日志来判断是否触发任务,使用如下:
如视频演示的那样我抓到了具体连接校园网的那一条日志,接下来只需要写逻辑就好了:
记得要将获取到本机ip变量替换到相应的位置上去
效果:
其实我挺好奇会不会有同校的人看到这篇文章
post的话怎么折腾哇?
post最后那个路径名怎么填?
我们学校是 GET 方法连接,你要整你们学校的得自己去抓包看参数是啥