路由器折腾3——shell实现自动登录网关

作者: shad0w_walker(admin) 分类: 网络 发布时间: 2017-01-17 13:36 ė 6 没有评论

linix 的设计哲学:

Where there is a shell,  there is a way.

 

在我们学校,连接进入校园网之后,需要登录一个网关,才可以访问外网,界面大概是这样的。(其实校园网网关有两种系统,普通使用的和机房使用的是不一样的,而且机房不收费)

当有设备连入路由器后,访问网关地址就能打开这个界面的登录网关。但是,这个网关连入时要选择连接时间,10小时一到就会自动断网,为了网络不中断需要不断地重新登录网关十分麻烦,所以我打算写一个自动登录的脚本。

1、查看请求信息

打开chrome,打开开发者界面,进入network选项,然后填写账号密码,选择10小时,点击登录网关按钮,就可以查看到登录的请求如下

这是登录网关请求:

这是退出网关请求:

可以看到,在登录的过程中发送了__EVENTTARGET、__VIEWSTATE、TextBox1、TextBox2、nw、tm、Button这几个data,前两个分别是对原网关网页中的一部分进行base64编码以验证,然后是账号、密码,选择的访问范围和连接时间,最后一个是点击的按钮。后面5个都好搞定,那么前两个从哪里获得呢?

对前两个base64解码之后找到了它们对应的原网页html代码段,本来打算对这两部分截取出来进行base64编码,但是重新检查原网关登录页面的源码,发现__EVENTTARGET、__VIEWSTATE这两个都已经包含在里面了,如下图:

这样,这几个数据就都已经搞定了。

 

2、模拟请求

请求的内容非常的简单,接下来就是模拟发送请求了。一般写爬虫或者发送请求,首选的是python或php什么的,但是一个存储空间只有8M的路由器,在不外接存储设备的情况下,根本装不了python。而php不知道行不行,反正我不大会。

最后,蒟蒻的我只好采用shell。shell下有一个非常好用的数据传输工具,没错就是curl。

首先使用指令opkg install curl安装curl工具,天哪竟然没有自带这个功能。

当我使用curl发送请求时,发现无论怎样登录都不成功,然后我点了chrome里的view encoded,直接发送url编码后的数据,发现登录成功了,原来是curl自己的url编码方式也就是–data-urlencode选项不能彻底地转码。于是我十分无聊的……自己写了个url转码的函数,就是下面代码中的function urlencode。

然后就是编写一个shell脚本了,注意pandorabox自带的shell是ash,我安装了一个bash,指令是opkg install bash

请求需要分两步进行,第一步先请求网关登录页,解析得到VIEWSTATE和EVENTVALIDATION这两个数据内容,然后对这两个数据进行url编码,得到编码后的数据,接着将获取的数据带着账号密码发送给网关登录页就行了。上述脚本中login下的是登录网关请求,logout下的是退出网关请求。

 

3、定时登录

最后我想每隔一小时运行一次脚本,使用指令crontab -e进入计划任务的编辑界面,加入下面这句话就行了:

0 * * * * /root/login.sh > /www/wg.html

为了查看登录的信息,我把网关登录返回的页面输出到了路由器中的wg.html文件中以便查看。

 

本文出自shad0w_walker,转载时请注明出处及相应链接。

本文永久链接: https://www.sdwalker.com/archives/611.html

发表评论

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

返回顶部