我旦的校园网还算是不错的,速度快,不收费。但是,在配置好 IP 之后,需要使用 Web 进行一次认证,才可以正常上网。
校园网最近进行了一次升级,官方也提供了Linux脚本。这下方便了许多。
下面直接上代码吧。分别是自己写的Python脚本和官方提供的bash脚本。
本脚本托管于Github。更多说明可以移步这里。记得右上角给个小星星~
以下是旧文
这下可把我们这些 Linux 用户坑死了:室友说,他们服务器本来是最小安装,就为了校园网认证,还得装一个桌面……
那么,怎么让在没有桌面的情况下自动进行认证呢?
静态检查
有人说,什么是职业习惯?看到网址后面有你输入的参数,顺手输入个 '
进去;看到一个漂亮的网页,顺手一个 F12。
我们的认证地址是 http://10.108.255.249/index.html
,后面还可以加一个参数 url=about:blank
是认证成功后跳转地址,可以随便写。
在网页 load 过程中,我们发现了一个 login.js
和 md5.js
,还有一个 message,js
。按照常理,message 肯定是页面上的滚动新闻,login.js
控制登录流程,md5.js
用于将用户名和密码加密传送。由于此页面不是 https,所以走一层自己的加密总是会好一些的。
打开 login.js
,我们发现它其实是使用的 srun 这个东西。看起来好眼熟,但是忘了全名是啥了。直接找到 do_login
函数,正如我们所料,「密码 md5 加密传送」。同时我们也知道了认证地址是 /cgi-bin/do_login
。
动态检查
我们使用自己的学号和密码进行登录,观察请求。果然是只有一个发送到 do_login
的 post 请求。但是里面的参数我却看不懂了:上面明明说的是「密码 md5 加密传送」,这里却发的是明文。哦不,发的是 {TEXT} 密码明文
,它在前面加了一个 {TEXT}
。
其他都是一些无关紧要的参数,至少我看来无关紧要。
返回值是一串数字。如果密码错误,那么返回的消息是「密码错误」。
编码
SO?这么简单?本来还以为需要拿 csrf token 之类的东西呢。
祭出 PyCharm,开撸:
测试
由于认证成功后,需要 N 长时间没有网络连接才能再次认证,没有「强制下线」功能。所以我使用一个新的线路进行测试。
树莓派上烧好了 Ubuntu-Mate,进入系统,配置好 IP 和网关。
打开 Firefox,尝试进入一些常用网站,都是超时的。Ping 常用网站也都 Ping 不通。
使用 Python3 运行上面的代码,屏幕输出了一个数字。
再次打开 Firefox,进行网络访问,OK 了。
要自动登录啊
没错,就是这么懒。
上面说了,如果 N 长时间没有网络流量,那么网关会把你踢下线。为了防止这种情况发生,我们需要让这个脚本自动运行。
0 * * * * /usr/bin/python3 /home/login.py
不过,我在这里使用了 crontab –uroot –e
而不是 crontab –e
。这样好像可以获取最高权限,比如前者可以设置自动重启而后者就不行。
结论
简直了!意想不到的简单!MD5 神马的根本没有用到!
这下只需要写一个 crontab 和一个 service 就可以实现树莓派开机自动联网了,同时那些服务器也不必安桌面环境了。
真好。
发表回复