用Python登录Dr.com

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错
如今一般的大学校园或者公寓都是通过客户端来限制路由器使用,基本上都是Dr.com客户端,有的是登录样式,有的是插件样式。下面我们来说说Python定制自己的客户端。

前提:isp得支持web登录的方式。
 
说明:每个ISP的登录页面不一样,不过我估计算法都是一样的,于是解决方案应该也是相似的,只是表单的key可能不太一样。

首先,分析登录页面。
 
页面head镶嵌了标签,所有的提交相关的脚本都在这里。页面关键部分是两个表单:f1和f0。整个f0是看不见的,但是点击f1的提交时,会直接调用f0的提交而不是提交自己。表单的table布局就不吐槽了…

部分HTML

01.

 
02.
 
03…. 
04.
 
05.

 
06.

 
07. 
08.

 
09.

 
10.

 
11. 
12.

 
13.

 
14.

 
15…. 
16.

 

这里可以看见,点击submit的时候,调用cc(0),提交的时候调用ee()函数

部分js:

01.function cc(ss) { 
02.  f0.R1.value = ss; 
03.} 
04. 
05.function ee() { 
06.  if (f1.DDDDD.value == “”) { 
07.    alert(“请输入您的账号 Please enter your account account number”); 
08.    return false; 
09.  } 
10.  f0.DDDDD.value = f1.DDDDD.value 
11.  if (ps == 0) { 
12.    f0.upass.value = xproc1(f1.upass.value); 
13.  } else { 
14.    tmpchar = pid + f1.upass.value + calg; 
15.    f0.upass.value = calcMD5(tmpchar) + calg + pid; 
16.    f0.R2.value = 1; 
17.  } 
18.  document.f0.submit(); 
19.  return false; 
20.} 

 显然,点击提交后,会对f0进行一系列赋值,如果没有问题就会提交f0

f0:

01.
 
02. 
03. 
04.

 

 参考js里的内容,用python的dict表示f0的话有如下的伪代码:

01.f0={} 
02.f0[“DDDDD”] = f1[‘DDDD’] 
03.f0[“upass”] = calcMD5(pid + f1[‘upass’] + calg) + calg + pid; 
04.f0[“R1”] = ss 
05.f0[“R2”] = 1 
06.f0[“para”] = 00 
07.f0[“0MKKey”] = 123456 
 
其中 ss、pid、calg都是常量,f1[‘DDDD’]、f1[‘upass’]分别是用户输入的用户名和密码字符串

关键在于calcMD5的算法。
 
从函数名和函数本身来看,这个函数是MD5的一种实现。然而对js代码进行移植的过程中出现了一些问题:js和python的移位操作表现不同。
 
既然整个f0[’upass’]字段除了用户输入的密码以外,其它都是常量,完全可以用js计算出f0[’upass’],python中只要保存这个字符串就行了。

用Python登录Dr.com

检查cookies发现整个网页没有使用cookies。
 
登录后跳转到登出页面,分析登出页面发现,登出只需要访问某个特定的网页就行了。

于是整个思路很简单,pos登录服务器实现登录,get指定网页登出。实现代码如下:

01.import sys 
02.from urllib import urlencode 
03.from urllib2 import urlopen 
04. 
05.username = “s10********” 
06.upass = “6696a3***********************************” 
07.LOGIN = “http://202.1**.***.***/” 
08.LOGOUT = “http://202.1**.***.***/F.htm” 
09. 
10.def post(url, data=None): 
11.    if data: 
12.        data = urlencode(data) 
13.    response = urlopen(url, data) 
14.    return response.read() 
15. 
16.def login(): 
17.    data={} 
18.    data[“DDDDD”] = username 
19.    data[“upass”] = upass 
20.    data[“R1”] = 0 
21.    data[“R2”] = 1 
22.    data[“para”] = 00 
23.    data[“0MKKey”] = 123456 
24.    post(LOGIN, data) 
25.    pass 
26. 
27.def logout(): 
28.    post(LOGOUT) 
29. 
30.def main(argv): 
31.    if argv[0] in (‘login’,’in’,’i’): 
32.        login() 
33.    elif argv[0] in (‘logout’,’out’,’o’): 
34.        logout() 
35.        pass 
36.    pass 
37. 
38.if __name__ == ‘__main__’:   
39.    main(sys.argv[1:]); 

《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm

《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python脚本获取Linux系统信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

Ubuntu下用Python搭建桌面算法交易研究环境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Python 的详细介绍请点这里
Python 的下载地址请点这

未经允许不得转载:演道网 » 用Python登录Dr.com

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册
© 2018 演道网   本站主题由 themebetter 提供   网站地图 QQ群250329766 京ICP备16029834号
账号 Account
密码 Password