校园网络的自动登录

校园网的管理系统升级之后,闹过很长一段时间的各种不正常,所以服务器也一直没有上线。刚刚某研究生怠工,所以偶下午有了几个小时空闲时间,然后就把登录脚本系统略微更新了一下。登录脚本的作用有两个:一个是要能够连上校园网,另一个是要能够检测校园网的连接状态,然后在断线的时候尝试自动重连。这对于远程使用的网络服务器是非常有用的,天杀的某大学校园网,竟然能想出来服务器需要登录,还得要web界面这种烂事。网络中心的亲们,你们见过几台服务器是有显示器的?

基本解决方案是,用curl模拟web界面登录,并利用ping来检测连通性。我们先来说ping的事情,这个够简单。

Linux里的ping有几个有用的参数,例如我现在用的是下面的命令来检测连通性:

ping –c 1 –W 1 www.baidu.com

意思是向我们伟大的度娘打个招呼(-c 1 发一个icmp包,-W 1 等待回复1秒),要是度娘都不理你的话,那铁定是校园网不通。此外,更重要的是,ping这个命令如果不是全部发出的包都返回的话,那么出口代码就不会是0,而是比0大的数值。除非完全正常,才会返回0,具体解释见manpages。

然后说怎么用curl模拟web界面登录,这算是稍微难点的部分,需要用chrome做一点点web页面的调试工作。首先,不管什么办法,打开登录页面,然后F12开调试器,随便输用户名密码,然后看看究竟送到什么地方去了。很容易发现的是:信息是用ajax同步提交送出的,而且送出的内容还挺多。特逗的是,密码居然送的是明文,简单加密的密码生成了一个临时变量却没用。利用调试器设置断点,直接截获post给服务器端的数据,然后搞明白是post给哪个php页面的,用

curl –d "数据" "URL"

这个形式,就能把网络连上了,那么发出连接命令后,究竟有没连好呢?只要看看登录页面里面剩下的那些js脚本就明白了,服务器会返回一个字符串,逗号分隔的,开始写着login_ok就是连好了,后面是两个cookie,有一个cookie里头还有密码!编码方式吗,还是呵呵一下吧,这个稍微仔细看看搜一下就明白了,跟基金委的页面某些信息编码方式是一样的。至于怎么获得服务器返回的字符串,怎么分析它,对于Linux有熟练了解的话,这些都不是事。

需要注意的是,空闲时间过长,有可能断线,所以,偶搞了个perl脚本,然后cron成10分钟检测一次,断了就重连,重连3次不能恢复链接,那就等10分钟再说。

具体哪个学校我就不说了,希望看见这篇文章的小伙伴们都能找到令你们开心的部分。

此条目发表在玩电脑分类目录。将固定链接加入收藏夹。