在路由器上写CMCC自动登录验证脚本

Xiaoxia 2012-04-28 00:03

今天入手了一个新的路由器,160RMB,特点是体积很小,像个火柴盒,但有64MB内存,安装openWRT(Linux)操作系统,内核比较新。玩了一下,功能很强大,跟那些几千元的大型路由器有的比呀!

如下图模型:


买回来马上看看配置如何,

看起来蛮不错的,内存也很足够,能做一般的web服务了。目前我博客的web服务占用的内存也就在60MB左右,如果不用php和mysql的话,web服务只需要30MB就够!

 

刚买回来的路由,最想做的第一件事当然是在上面安装Python了,在这个基础上,我以前的一堆代理程序和VPN程序都能够跑了。

然而悲剧的是,我刚想用opkg安装python软件包,系统提示我仅剩下200多kb内存空间了,无法安装成功。看来这个内置的Flash容量太少了,装个python当然不行。所以,我把我经常戴在钥匙上的U盘拿下来了,在路由系统里用ext2格式化了一次。把系统软件转移到了U盘上(做法很简单,直接把python安装到u盘,然后在环境变量的PATH里设置U盘上的bin目录即可)。

root@OpenWrt:~# python -V
Python 2.7.3rc2

 

本来打算今晚写好一个基于IPv6通信的VPN程序,放在实验室里跑的,这样在宿舍就能够免费撑实验室的网而且不断网了!但是折腾了一个晚上,都无法解决一个很诡异的错误:

[Errno 81] File descriptor in bad state.

Google了也找不到解决方案。所以无法在python里创建tun设备了,VPN也没戏了。奇怪的是,我用ip tuntap命令是可以创建和配置的,难道是我的python库有问题???

 

VPN没有搞成,最后搞了一个CMCC的无线中继。而且免去了CMCC的登录验证,因为验证已经在路由里完成了。我的做法是,在原有的无线网的基础上,增加另外一个无线网络,但是采用客户端模式,而不是接入点模式,openWRT的配置操作很简单,几步就完成了。

但是,CMCC的登录验证代码还是要自己写的。所以还是花了时间去研究一下登录过程。

代码如下:

#!/usr/bin/env python
import cookielib, urllib2
import re
import os
import random
import time

username = ''
passwd = ''

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

test = opener.open('http://xiaoxia.org')
data = test.read()
userip = re.search(r'NAME="wlanuserip" value="(.+)">', data).group(1)
acname = re.search(r'NAME="wlanacname" value="(.+)">', data).group(1)
acip = re.search(r'NAME="wlanacip" value="(.+)">', data).group(1)

url = os.path.join(os.path.dirname(test.url), 'index.jsp')
data = 'wlanuserip=%s&wlanacname=%s&wlanacip=%s' % (userip, acname, acip)
print 'opening', url, data
data = opener.open(url, data).read()

url = os.path.join(os.path.dirname(test.url), 'jsp/do_login.jsp')
data = 'bpssUSERNAME=%s&bpssBUSPWD=%s&' +\
 'Submit=\xb5\xc7\xc2\xbc&bpssLoginType=1' % (username, passwd)
print 'opening', url, data
data = opener.open(url, data).read()
print 'result', data

代码是在路由器上打的,所以看起来比较乱,但是步骤不多。如果已经登录成功,则肯定可以打开xiaoxia.org,所以后面的步骤都不起作用。如果未登录,会被跳转到登录页面,提交帐号登录即可。

为了能够让路由器保持CMCC的在线状态,把上面的脚本加入了crontab,设置为10分钟自动执行一次该脚本。所以今晚的努力还是没有白费,以后在笔记本或者手机上可以不用输入帐号使用无线网了,也不用担心老登不上CMCC的那个bug了。。。

That's all. Thank you:)

[返回] [原文链接]