用python登录Dr.com思路以及代码分享_python教程-查字典教程网
用python登录Dr.com思路以及代码分享
用python登录Dr.com思路以及代码分享
发布时间:2016-12-28 来源:查字典编辑
摘要:前提:isp得支持web登录的方式。说明:每个ISP的登录页面不一样,不过我估计算法都是一样的,于是解决方案应该也是相似的,只是表单的key...

前提:isp得支持web登录的方式。

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

首先,分析登录页面。

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

部分HTML

<form name="f1" method="post" action="" onsubmit="return ee()"> <table border="0" width="100%" cellspacing="1" cellpadding="0" height="100%"> ... <tr> <td height="34" width="35%" align="right">账号 Account </td><td height="34" width="64%"> <input name="DDDDD" type="text" maxlength="26"></td> </tr> <tr> <td height="32" width="35%" align="right">密码 Password </td><td height="32" width="64%"> <input name="upass" type="password" maxlength="16"></td> </tr> <tr> <td height="57" width="35%"></td><td height="57" width="64%"> <input type="submit" name="0MKKey" value=""> <input type="submit" name="" value=""></td> </tr> ... </form>

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

部分js:

function cc(ss) { f0.R1.value = ss; } function ee() { if (f1.DDDDD.value == "") { alert("请输入您的账号 Please enter your account account number"); return false; } f0.DDDDD.value = f1.DDDDD.value if (ps == 0) { f0.upass.value = xproc1(f1.upass.value); } else { tmpchar = pid + f1.upass.value + calg; f0.upass.value = calcMD5(tmpchar) + calg + pid; f0.R2.value = 1; } document.f0.submit(); return false; }

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

f0:

<form name="f0" method="post" action=""><input type="hidden" name="DDDDD" value="0"><input type="hidden" name="upass" value="0"> <input type="hidden" name="R1" value="0"><input type="hidden" name="R2" value="0"><input type="hidden" name="para" value="00"> <input type="hidden" name="0MKKey" value="123456"> </form>

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

f0={} f0["DDDDD"] = f1['DDDD'] f0["upass"] = calcMD5(pid + f1['upass'] + calg) + calg + pid; f0["R1"] = ss f0["R2"] = 1 f0["para"] = 00 f0["0MKKey"] = 123456

其中 ss、pid、calg都是常量,f1['DDDD']、f1['upass']分别是用户输入的用户名和密码字符串

关键在于calcMD5的算法。

从函数名和函数本身来看,这个函数是MD5的一种实现。然而对js代码进行移植的过程中出现了一些问题:js和python的移位操作表现不同。

既然整个f0['upass']字段除了用户输入的密码以外,其它都是常量,完全可以用js计算出f0['upass'],python中只要保存这个字符串就行了。

检查cookies发现整个网页没有使用cookies。

登录后跳转到登出页面,分析登出页面发现,登出只需要访问某个特定的网页就行了。

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

import sys from urllib import urlencode from urllib2 import urlopen username = "s10********" upass = "6696a3***********************************" LOGIN = "http://202.1**.***.***/" LOGOUT = "http://202.1**.***.***/F.htm" def post(url, data=None): if data: data = urlencode(data) response = urlopen(url, data) return response.read() def login(): data={} data["DDDDD"] = username data["upass"] = upass data["R1"] = 0 data["R2"] = 1 data["para"] = 00 data["0MKKey"] = 123456 post(LOGIN, data) pass def logout(): post(LOGOUT) def main(argv): if argv[0] in ('login','in','i'): login() elif argv[0] in ('logout','out','o'): logout() pass pass if __name__ == '__main__': main(sys.argv[1:]);

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新python学习
    热门python学习
    脚本专栏子分类