在路由器上写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