打造内大最强路由器(二):深澜WEB自动认证

零、需求

内大的校园网是分为无线和有线两个部分。无线部分比较省心,当成功认证之后,你的校园网账号就会绑定当前设备的MAC地址,下次登录时无需重复认证。而有线部分就比较坑了,每当已登录的设备断开后则需要重新认证。

所以不仅每天起床后都需要手动进行登录认证,就连重启路由器也要认证……不堪其烦,于是摸索自动认证的方法。

本篇及后续系列篇章的功能都在ikirby的帮助下实现,在此感谢他的帮助。

一、分析

认证只需要在 http://172.31.99.50:802/srun_portal_pc.php?ac_id=2& 里输入学号密码就可以了,所以我们需要抓包查看这个过程到底发生了什么。

二、抓包

需要用到Chrome或者Edge。在认证页按下F12,选中Network。然后输入你的学号密码并登录。可以观察到此时在Name的下方多出了一项,我们点开它。

img1

这是一个POST请求,划到最下面,能看到几项关键的参数:usernamepassword,也就是你的学号和加密过的密码,所以基本可以判定这个POST请求就是认证的关键了。其他的一些不明所以的参数,更换账号进行对照实验时也不会改变,所以我们可以不再研究,原封不动保留即可。

img2

至于这个密码是怎么加密的,这些参数代表什么,其实并不需要关心,我们只需要在路由器上自动模拟发送这个POST即可。我们先尝试一下。

右键点击auth_action.php,选择Copy,Copy cURL(bath),使得它能够在Linux上运行。新建一个空白文件,粘贴进去,继续分析。

img3

三、模拟

img4

可以看到目标URL是 http://172.31.99.50:802/include/auth_action.php ,关键参数为--data-raw后面高亮的这一句,其他的-H都是登录时候的环境参数,是无关变量,猜测服务器不会对这些参数进行验证,可以尝试全部删了。

于是我们就可以用一条命令模拟这一个登录过程(记得把关键参数引号内的内容改为你自己的关键参数):

curl -d “关键参数” http://172.31.99.50:802/include/auth_action.php

在认证页把账号退出,确认下现在是未认证、上不了网的状态。然后打开路由器后台,系统->TTYD 终端,把命令复制进去。如图

(在Linux终端中,粘贴快捷键为Ctrl+Shift+v

img5

回车执行。

img6

返回了login_ok,此时路由器已经连上网了,模拟成功!

四、自启

我们的最终目的是实现在路由器开机时就自动进行登录认证,所以我们还需要写一个自启脚本。

找一个靠谱的文本编辑器,推荐 VS Code,把以下内容粘贴进去,并把关键参数改为自己账号的参数。

(请不要使用微软自带的记事本!!!)

#!/bin/sh /etc/rc.common
START=99

start(){
ping -c 1 202.207.0.6
while [ $? != 0 ]
do
	sleep 5
	ping -c 1 202.207.0.6
done
curl -d "关键参数" http://172.31.99.50:802/include/auth_action.php
}

原理也挺简单的,认证前需要先获取内网IP,所以可以通过不停地ping学校DNS来判断是否获取到了内网IP。当成功ping通的话就可以开始认证操作了。

改完关键参数后,全选、复制留作备用。

切换到英文输入,在TTYD 终端里,执行命令:

cd /etc/init.d     # 进入/etc/init.d
vi autologin       # 用vi编辑器创建并编辑文件autologin

要注意的是,此时是命令模式,需要按i键进入插入模式才可以输入。

然后把刚刚复制的内容粘贴进去。(再次提醒下,Linux终端里的粘贴快捷键为Ctrl+Shift+v

Esc返回命令模式,输入:wq并回车,保存退出。

img7

接下来给刚刚编辑的文件加上执行权限,终端执行:

chmod +x autologin

然后设置开机启动项,执行:

./autologin enable

五、测试

进入系统->启动项页面,查找有没有刚刚我们创建的autologin,看下它是不是已启用状态。

img8

接着进入系统->重启页面重启路由器,验证脚本效果。

至此,一个能够满足大部分需求的路由器就配置好了,后面的博文将会进行一些实验性操作,和一些细节性优化。

部分参考资料

OpenWrt的开机启动服务(init scripts)
小米路由器mini——Padavan折腾笔记