复旦大学有线校园网自动认证


发布于

|

分类

我旦的校园网还算是不错的,速度快,不收费。但是,在配置好 IP 之后,需要使用 Web 进行一次认证,才可以正常上网。

校园网最近进行了一次升级,官方也提供了Linux脚本。这下方便了许多。

下面直接上代码吧。分别是自己写的Python脚本和官方提供的bash脚本。

本脚本托管于Github。更多说明可以移步这里。记得右上角给个小星星~

以下是旧文

这下可把我们这些 Linux 用户坑死了:室友说,他们服务器本来是最小安装,就为了校园网认证,还得装一个桌面……

那么,怎么让在没有桌面的情况下自动进行认证呢?

静态检查

有人说,什么是职业习惯?看到网址后面有你输入的参数,顺手输入个 ' 进去;看到一个漂亮的网页,顺手一个 F12。

我们的认证地址是 http://10.108.255.249/index.html,后面还可以加一个参数 url=about:blank 是认证成功后跳转地址,可以随便写。

在网页 load 过程中,我们发现了一个 login.jsmd5.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 就可以实现树莓派开机自动联网了,同时那些服务器也不必安桌面环境了。

真好。


评论

  1. Coderge 的头像
    Coderge

    “{TEXT}” + PASSWORD 笑cry?

    1. 小金鱼儿 的头像
      小金鱼儿

      看了请求,第一反应就是WTF??!!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注