0%

服务器校园网登录验证解决方案

前两天把实验室的一台旧台式机装上了Ubuntu Server,打算当作测试服务器使用着玩。
装上之后意识到一个严重的问题:实验室电脑连接外网时候需要打开浏览器输入学号进行认证。

而对于服务器版的Ubuntu Server来说只有黑乎乎的命令行界面。根本没有浏览器可以打开,所以网络认证就无从谈起。。

就在准备打算重装一个Ubuntu Desktop的时候,某君提醒可以尝试使用curl来访问认证API!经过这个提醒,我打算使用Ubuntu Server
16.04 自带的Python3来实现以上功能。

首先,找到网络认证的网页 http://172.16.254.10/0.htm

随便输入账户密码后提交,同时使用Fiddler抓包数据。

在上一步中,我提交的账户密码分别为12345678和123456。而可以看到upass字段处的密码显然是经过加密的。

这就很头疼了。。

这时只能开始一步步地阅读,页面中的js代码了。
有关代码如下:

将密码加密部分的代码翻译为Python如下:

def encrypt_pass(upass):
pid = '2'
calg='12345678'
tmpchar = pid+upass+calg
return calcMD5(tmpchar)+calg+pid

def calcMD5(content):
return hashlib.md5(content.encode('utf-8')).hexdigest()

请求Http接口部分使用Python自带的库Urllib来实现。
全部代码完成后运行。然后
ping www.baidu.com

完整的源码在Github上。

浏览器只是特殊的”Httpclient”。所以不仅仅网络认证可以使用程序的方式来实现,任何可以由浏览器实现的功能都可以程序来实现。

cyhone wechat