综述
最近山大软件园校区QLSC_STU无线网掉线掉的厉害,连上之后平均十分钟左右掉线一次,很是让人心烦,还能不能愉快地上自习了?能忍吗?反正我是不能忍了,嗯,自己动手,丰衣足食!写个程序解决掉它!
假若你不能连这个无线,那就照照思路啦~
决战前夕
首先我们看一下那个验证页面是咋样滴,上个图先
嘿,这界面还算可以把,需要我们输入的东西就是俩,一个就是学号,另一个是身份证号后六位,然后就可以登录,享受免费的无线网啦。
私信博主001 领取完整项目代码!
不过不知道谁设置了个登录时长,一段时间后就会掉线了,于是,自动模拟登陆系统就要应运而生啦。
来,我们先点击一下连接,看一下浏览器怎么工作的。
按下F12,监听网络,我们点击第一个响应,也就是login.jsp,看一下。
我们具体看一下headers,里面form提交了什么东西,真的是茫茫多的数据啊。
嗯,一目了然POST的数据和提交的地址。 让我们来分析几个数据吧:
ClientIP:当前客户端的IP地址,在山大软件园校区这个地址是211.87开头的
timeoutvalue:连接等待时间,也就是俗话说的timeout
StartTime:登录时间,也就是在你登录的那一刻的时间戳,这个时间戳是13位的,精确到了毫秒,不过一般是10位的,我们加3个0就好了
shkOvertime:登录持续时间,这个数据默认是720,也就是12分钟之后,登录就失效了,自动掉线,我们可以手动更改
username:学号
password:密码,也就是我们身份证号后六位
我们需要在登录的时候把form表单中的所有信息都POST一下,然后就可以完成登录啦。 万事俱备,只欠东风,来来来,程序写起来!
一触即发
说走咱就走啊,天上的星星参北斗啊!
登陆地址:Request URL:http://192.168.8.10/portal/login.jsp?Flag=0
首先,我们需要验证一下IP地址,先写一个获取IP地址的函数,首先判断当前IP是不是211.87开头的,如果是的话,证明连接的IP是有效的。 首先我们写一个获取本机IP的方法:
self.ip_pre = "211.87" #获取本机无线IP def getIP(self): local_iP = socket.gethostbyname(socket.gethostname()) if self.ip_pre in str(local_iP): return str(local_iP) ip_lists = socket.gethostbyname_ex(socket.gethostname()) for ip_list in ip_lists: if isinstance(ip_list, list): for i in ip_list: if self.ip_pre in str(i): return str(i) elif type(ip_list) is types.StringType: if self.ip_pre in ip_list: return ip_list
这个方法利用了gethostbyname和gethostbyname_ex方法,获取了各个网卡的IP地址,遍历一下,找到那个211.87开头的IP,返回 接下来,获取到IP之后,我们便可以构建form,然后进行模拟登陆了。
#模拟登录 def login(self): print self.getCurrentTime(), u"正在尝试认证QLSC_STU无线网络" ip = self.getIP() data = { "username": self.username, "password": self.password, "serverType": "", "isSavePass": "on", "Submit1": "", "Language": "Chinese", "ClientIP": self.getIP(), "timeoutvalue": 45, "heartbeat": 240, "fastwebornot": False, "StartTime": self.getNowTime(), #持续时间,超过这个时间自动掉线,可进行设置 "shkOvertime": self.overtime, "strOSName": "",