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


Posted in Python onJune 25, 2014

前提: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%" class="f1">
...
<tr>
<td height="34" width="35%" align="right">账号 Account </td><td height="34" width="64%"> <input name="DDDDD" type="text" maxlength="26" class="input-border"></td>
</tr>

<tr>
<td height="32" width="35%" align="right">密码 Password </td><td height="32" width="64%"> <input name="upass" type="password" maxlength="16" class="input-border"></td>
</tr>

<tr>
<td height="57" width="35%"> </td><td height="57" width="64%"> <input type="submit" name="0MKKey" value="" onclick="cc(0)" class="login-b">  <input type="submit" name="" value="" onclick="reset();return false;"></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中sleep函数用法实例分析
Apr 29 Python
Python使用cookielib模块操作cookie的实例教程
Jul 12 Python
flask + pymysql操作Mysql数据库的实例
Nov 13 Python
使用python的pandas库读取csv文件保存至mysql数据库
Aug 20 Python
Python中xml和json格式相互转换操作示例
Dec 05 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
Jan 30 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
Jan 06 Python
Jupyter notebook无法导入第三方模块的解决方式
Apr 15 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
Jun 04 Python
python 实现Harris角点检测算法
Dec 11 Python
python爬取企查查企业信息之selenium自动模拟登录企查查
Apr 08 Python
python正则表达式re模块详解
Jun 25 #Python
Python通过websocket与js客户端通信示例分析
Jun 25 #Python
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
Jun 25 #Python
Python中文编码那些事
Jun 25 #Python
教你如何在Django 1.6中正确使用 Signal
Jun 22 #Python
python抓取网页时字符集转换问题处理方案分享
Jun 19 #Python
python在linux中输出带颜色的文字的方法
Jun 19 #Python
You might like
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
php数组去重复数据示例
2014/02/25 PHP
[原创]PHP字符串中插入子字符串方法总结
2016/05/06 PHP
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
自定义PC微信扫码登录样式写法
2017/12/12 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
JavaScript 反射和属性赋值实例解析
2019/10/28 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
Python3编程实现获取阿里云ECS实例及监控的方法
2017/08/18 Python
Django 中自定义 Admin 样式与功能的实现方法
2019/07/04 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
Python脚本去除文件的只读性操作
2020/03/05 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
小蚁科技官方商店:YI Technology
2019/08/23 全球购物
Sql面试题
2013/03/20 面试题
建筑工程专业大学生求职信
2014/04/23 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
村安全生产责任书
2014/08/25 职场文书
客户答谢会活动方案
2014/08/31 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
十八大宣传标语
2014/10/09 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
求职信范文怎么写
2015/03/19 职场文书
会计主管岗位职责
2015/04/02 职场文书
葬礼主持词
2015/07/02 职场文书
小组组名及励志口号
2015/12/24 职场文书