Python结合NC.exe 实现模拟登录&批量填表
1.工作需求
有很多事项,每个事项分为:名称、种类。时间等,需要把每个事项逐个输入到网页中并提交。
如果用人肉操作的话,流程就是先登录到网站后台,点击“添加”——>输入各项内容——>点击“保存”。然后重复这个动作100遍。如图:

2.设想的解决办法
对手工“登录”、“添加”、“保存”的全过程进行抓包,获取整个流程提交的数据,然后将其POST到服务器。
3.具体操作
3.1 抓取并分析操作时的数据
使用Chrome浏览器,打开所需登录的页面:http://222.000.36.113/ ,并输入账号与密码:

然后按下键盘的F12,浏览器弹出“开发者工具”的界面,选择"Network":

然后将鼠标移回登录窗口,点击“登陆”。然后“开发者工具”界面会出现POST和GET的文件与数据,找出登录对应的文件,点选Header标签。
此时在Form Data里面能看到POST到服务器的参数(明文密码,汗):

登录进去之后,点击“添加”按钮,出来一个表单界面,让填写内容。开始填写各项内容ing(截图只是内容一部分):

辛苦填完之后,点击“保存”。内容就保存在了服务器中。
此时在“开发者工具”里面就能看到点击“保存”按钮后,浏览器的行为:



这次POST的数据类型和登录时的不同了(见红色方框)。
登录时是Form Data,而提交时却是Request Payload。
(这一点在之后的操作中难倒了我。我不会用Python的Requests模块提交这些数据。因为我不知道如何加上Cookie)
以上就是登录+提交的全程。
3.2编程实现
3.2.1 模拟登录获取Cookie
经过我多次试验,发现提交这些数据需要用到Cookie。i所以先模拟登录获取Cookie:
import httplib
import urllib
#定义请求头
reqheaders={'Content-type':'application/x-www-form-urlencoded',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Host':'222.000.36.113',
'Origin':'http://222.000.36.113',
'Referer':'http://222.000.36.113/login_loginOut.fdo',
'User-Agent':'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',} #定义post的参数
reqdata={'tnnd':'abcdef','tmmd':'mimaqqq'} #对请求参数进行编码
data=urllib.urlencode(reqdata)
#连接到服务器
conn=httplib.HTTPConnection('222.000.36.113')
#提交登录的post请求
conn.request('POST', '/login_loginIn.fdo', data, reqheaders)
#打印服务器返回请求头中设置的cookie
print(res.getheader('Set-Cookie'))
3.2.2模拟提交
所需提交的Request Payload属于 Multipart-Encoded 格式,在Python的文档里有记载:
http://docs.python-requests.org/en/latest/user/quickstart/#post-a-multipart-encoded-file
文档中的操作方法是:
url = 'http://httpbin.org/post'
files = {'file': open('report.txt', 'rb')}
r = requests.post(url, files=files)
r.text
其中 report.txt 里面就是上图的Request Payload 下方的一长串字符内容。
(可是我按照文档进行操作的时候不成功,是因为服务器需要Cookie而我没加上?那么Requests这个方法怎么加上Cookie呢?)
于是我使用了多年前渗透测试中的一个技巧:
a.先把浏览器提交过程中所有POST的内容全部抓了下来,保存为“1.txt”。用的是WSockExpert。
b.使用NC,“nc 222.000.36.113 80 < 1.txt”,把txt的内容全部提交到目标服务器。
经测试,此方法可行。但要注意两点:
一是Cookie要有效。可以由模拟登录的步骤中获取。
二是1.txt 的编码格式为UTF-8,不然提交的内容全是乱码!
(第二条当时百思不得其解,最终人肉测试了出来。最后才发现response headers写的是charset=UTF-8,忽略了,汗)
那就用Python来调用NC吧:
import os
os.system("nc 222.000.36.113 80 < 1.txt")
剩下的工作,就是将各个事项汇总到一起,然后用Python将对应的事项内容替换到1.txt的那一套格式里面,逐个提交100次!
PS:
请问一下如何用Python提交这个Request Payload?调用NC太不优雅了。
Python结合NC.exe 实现模拟登录&批量填表的更多相关文章
- Python爬虫实战五之模拟登录淘宝并获取所有订单
经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 温馨提示 更新时间,2016-02-01,现在淘宝换成了滑块验证了 ...
- python RSA加密解密及模拟登录cnblog
1.公开密钥加密 又称非对称加密,需要一对密钥,一个是私人密钥,另一个则是公开密钥.公钥加密的只能私钥解密,用于加密客户上传数据.私钥加密的数据,公钥可以解密,主要用于数字签名.详细介绍可参见维基百科 ...
- C#程序模拟登录批量获取各种邮件内容信息
一般来说,如果现实中你有这样一种需求“假如你是褥羊毛的羊毛党,你某日发现了一个app有一个活动,通过邮箱注册账号激活可以领5元红包,而恰恰你手上又有一批邮箱可用,那么批量获取邮箱中的激活链接去激活则是 ...
- Python实现北邮人论坛模拟登录
推荐去我的博客里查看这篇文章,效果更佳: http://fuxuemingzhu.cn/2017/08/12/byrbbs-login/ 模拟登录北邮人论坛可能是每个学着写爬虫的北邮人必备技能了.在网 ...
- 基于python的request库,模拟登录csdn博客
以前爬虫用urllib2来实现,也用过scrapy的爬虫框架,这次试试requests,刚开始用,用起来确实比urllib2好,封装的更好一些,使用起来简单方便很多. 安装requests库 ...
- Python网络爬虫实战(四)模拟登录
对于一个网站的首页来说,它可能需要你进行登录,比如知乎,同一个URL下,你登录与未登录当然在右上角个人信息那里是不一样的. (登录过) (未登录) 那么你在用爬虫爬取的时候获得的页面究竟是哪个呢? 肯 ...
- python中使用cookie进行模拟登录
背景:使用cookie模拟登录豆瓣->我的豆瓣网页 [准备工作] 1.通过Fiddler抓取“我的豆瓣”url: 2.通过Fiddler抓取“我的豆瓣”cookie值. import urlli ...
- urllib库利用cookie实现模拟登录慕课网
思路 1.首先在网页中使用账户和密码名登录慕课网 2.其次再分析请求头,如下图所示,获取到请求URL,并提取出cookie信息,保存到本地 3.最后在代码中构造请求头,使用urllib.request ...
- python之cookie, cookiejar 模拟登录绕过验证
0.思路 如果懒得模拟登录,或者模拟登录过于复杂(多步交互或复杂验证码)则人工登录后手动复制cookie(或者代码读取浏览器cookie),缺点是容易过期. 如果登录是简单的提交表单,代码第一步模拟登 ...
随机推荐
- cf 126D - Fibonacci Decomposition
题目大意 \(t\le 10^5\)组询问 每次询问\(1\le n\le 10^{18}\) 求有多少种\(n\)的\(fibonacci\)分解 分解定义为:每个\(fib\)数最多选一个,且和为 ...
- 所驼门王的宝藏(bzoj 1924)
Description Input 第一行给出三个正整数 N, R, C. 以下 N 行,每行给出一扇传送门的信息,包含三个正整数xi, yi, Ti,表示该传送门设在位于第 xi行第yi列的藏宝宫室 ...
- Java下使用Swing来进行图形界面开发
1. GUI从创建window开始,通常会使用JFrame.JFrame frame = new JFrame(); 2. 你可以这样加入按钮,文字字段等组件.frame.getContentPane ...
- C#根据反射和特性实现ORM映射实例分析
本文实例讲述了C#根据反射和特性实现ORM 映射的方法.分享给大家供大家参考.具体如下: (一)关于反射 什么是反射? 反射就是在运行时,动态获取对象信息的方法.比如:运行时获得对象有哪些属性,方法, ...
- hdu 1690(Floyed)
Bus System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- TopCoder SRM 301 Div2 Problem 1000 CorrectingParenthesization(区间DP)
题意 给定一个长度为偶数的字符串.这个字符串由三种括号组成. 现在要把这个字符串修改为一个符合括号完全匹配的字符串,改变一个括号的代价为$1$,求最小总代价. 区间DP.令$dp[i][j]$为把子 ...
- QUICK START GIT
install git at you laptop https://git-scm.com/downloads config git at you laptop git config --global ...
- 注意这几点,轻轻松松配置 Nginx + Tomcat 的集群和负载均衡
Tomcat 集群是当单台服务器达到性能瓶颈,通过横向扩展的方式提高整体系统性能的有效手段.Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,可以通过简单的配置实现 Tomcat 集群 ...
- Ansible进阶之企业级应用
1.环境 cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 ...
- Java---杨辉三角简易解法(通俗易懂,逻辑严密)