通过Python实现自动填写调查问卷


Posted in Python onSeptember 06, 2017

0X00 前言

快开学了,看到空间里面各种求填写调查问卷的,我才想起来貌似我也还没做。对于这种无意义的问卷,我是不怎么感冒的,所以我打算使用”特技”来完成,也就是python,顺便重新复习一下python,真的好久没用了。下面,表演开始……

0X01代码编写思路

首先先创建一份问卷

通过Python实现自动填写调查问卷

我们随便填写一个问卷并提交,在提交之前开启Burpsuite截获数据包

通过Python实现自动填写调查问卷

对于截获的数据包进行分析,有的被url编码了不利于分析,可以使用Burpsuite编码模块解码替换,这样就好分析了

通过Python实现自动填写调查问卷

通过Python实现自动填写调查问卷

通过Python实现自动填写调查问卷

通过观察可以发现,post了一串奇怪的数据submitdata=1$2}2$3}3$3}4$4}5$3}6$2}7$4}8$2}9$3}10$3。仔细分析可看出数据大概是这个意思submitdata=题号$选项号}题号$选项号}题号$选项号}……..

利用这些信息就可以开始编写python程序了

通过Python实现自动填写调查问卷

运行结果如下

通过Python实现自动填写调查问卷

貌似网站还有其他反爬虫机制,在连续提交几个表单之后,就出现了验证码。难道此时我们还要给程序添加上识别验证码的功能?其实不必,我们可以先分析一下刚刚Burpsuite截获的header信息,来看看到底网站是通过什么方式,识别出我们是用爬虫来提交问卷的。

通过Python实现自动填写调查问卷

通过Python实现自动填写调查问卷

通过一番测试,我发现当我连续提交3份问卷,再换一个IP提交3个问卷,也就是连续提交了6份问卷,并没有触发网站的反爬虫机制。所以我们可以猜测对方基于IP提交问卷的频率来识别爬虫程序的。看到这里,大家可能会想,我们可以通过网上的免费代理来提交问卷。例如这些

通过Python实现自动填写调查问卷

那是不是意味着我们还要往python代码中添加提取免费代理IP的功能呢?NO NO NO!换个思路,在CTF比赛中会遇到一种题目,例如你的IP是来自德国的才可以拿到flag。所以,我们的思路就是进行数据包头欺骗,伪造我们的IP,骗过服务器。下面来说说伪造IP的几种方式。

X-Client-IP:1.1.1.1
X-Remote-IP:2.2.2.2
X-Remote-Addr:3.3.3.3
X-Originating-IP:4.4.4.4
X-Forwarded-For:5.5.5.5

我们每个都尝试一下,然后在后台统计那里可以看到我们的问卷来源

通过Python实现自动填写调查问卷

这里我们发现用X-Forwarded-For可以绕过,按我们就用这种方法在header信息中添加X-Forwarded-For字段,所以修改后的脚本如下

通过Python实现自动填写调查问卷

运行结果如下

通过Python实现自动填写调查问卷

再到后台看看统计信息

通过Python实现自动填写调查问卷

通过Python实现自动填写调查问卷

至此,我们算是完美的解决任务了。如果大家想去掉调查问卷中国外的IP地址,可以收集一下中国的IP地址段,然后添加进程序,处理一下即可。

0X02总结

大家平常可以把学到的东西用到实际生活中,遇到困难的时候不要慌,多思考,找到最优的解决方法。例如上面,我并没有在代码中添加验证码识别模块,也没有通过走代理的方式来绕过网站的反爬虫机制,而是通过分析网站的反爬虫机制,并且使用所学的安全知识(HTTP头欺骗)轻松解决问题,使用最短的代码完美完成任务。

Python 相关文章推荐
Python读取环境变量的方法和自定义类分享
Nov 22 Python
python中随机函数random用法实例
Apr 30 Python
scrapy spider的几种爬取方式实例代码
Jan 25 Python
Python读写/追加excel文件Demo分享
May 03 Python
python中退出多层循环的方法
Nov 27 Python
ML神器:sklearn的快速使用及入门
Jul 11 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
Python中BeautifuSoup库的用法使用详解
Nov 15 Python
解决python脚本中error: unrecognized arguments: True错误
Apr 20 Python
Python pexpect模块及shell脚本except原理解析
Aug 03 Python
细说NumPy数组的四种乘法的使用
Dec 18 Python
ASP.NET Core中的配置详解
Feb 05 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 #Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
Sep 05 #Python
Python基于回溯法子集树模板实现图的遍历功能示例
Sep 05 #Python
Python数据结构与算法之图结构(Graph)实例分析
Sep 05 #Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
Sep 05 #Python
python进程管理工具supervisor的安装与使用教程
Sep 05 #Python
基于Django模板中的数字自增(详解)
Sep 05 #Python
You might like
解析php中call_user_func_array的作用
2013/06/07 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
php删除文本文件中重复行的方法
2015/04/28 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
Javascript的闭包
2009/12/31 Javascript
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
快速解决js开发下拉框中blur与click冲突
2016/10/10 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
详谈js中数组(array)和对象(object)的区别
2017/02/27 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
2017/04/22 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
python: line=f.readlines()消除line中\n的方法
2018/03/19 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
类、抽象类、接口的差异
2016/06/13 面试题
上班旷工检讨书
2015/08/15 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python