用python登录Dr.com思路以及代码分享

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

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

首先,分析登录页面。

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

部分HTML

立即学习“Python免费学习笔记(深入)”;


登录后复制登录后复制

参考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 sysfrom urllib import urlencodefrom urllib2 import urlopenusername = "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) passdef logout(): post(LOGOUT)def main(argv): if argv[0] in ('login','in','i'):  login() elif argv[0] in ('logout','out','o'):  logout()  pass passif __name__ == '__main__':  main(sys.argv[1:]);

登录后复制

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2289801.html

(0)
上一篇 2025年2月27日 23:57:51
下一篇 2025年2月22日 20:42:30

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论