0x00
前几年,在上一家公司需要员工为创新单位投票,每天只能投一票。那就投呗,我就多点击两下投票,界面显示“一个IP每天只能投一票”,这个提示好奇怪,“一个IP”?合着不同的IP地址就是可以继续投呗?说干就干~
0x01
XX公司创新单位投票解决方案
方案一、员工手动刷
实施难度:低
技术难度:无
每天增长票数:100~200
优点:能够增强公司融入感,提高公司在员工心中形象。
缺点:适合双卡手机,外地出差人员使用wifi人员。
方案二、发朋友圈,让亲戚朋友帮忙
实施难度:中
技术难度:无
每天增长票数:50~100
优点:能够让亲戚朋友了解公司
缺点:有些人不愿意莫名其妙的投票,点赞
方案三、程序自动化
实施难度:中
技术难度:高
每天增长票数:理论最多2^32-1
优点:能够快速提高票数
缺点:风险高,可能后台会查到恶意刷票。
技术路线fiddler+jmeter自动化执行
步骤:
1使用fiddler抓包,抓取网站投票URL,写入脚本。
2观察到网站限制一个IP每天只能投票一次(并未限制用户名),可以使用IP欺骗或代理试一下,经验证代理可行。
3百度一下代理并爬取代理IP和端口号,做成csv文件。
4完善脚本,参数化,设置等待时间等。
5执行
0x02
1.打开fiddler,使用浏览器浏览投票网站,抓取创新产品URL:http://www.cnbp.net/events/ITServiceInnovation/PostVote.ashx?voteid=5943&votetype=2017innovation1,创新单位URL:http://www.cnbp.net/events/ITServiceInnovation/PostVote.ashx?voteid=5943&votetype=2017innovation3,将fiddler中报文头写入http head manager。
2.打开jmeter,将两个URL写入脚本。
3.因为网站限制一个IP每天只能投票一次,可以使用免费代理。百度一下免费代理,选择西刺免费代理(也可以是其他);
4.开始时手动将每一页的IP地址和端口号复制到Excel中,另存为csv文件,后来觉得好傻,为什么不能直接抓取页面中的IP呢?
5.了解到可以使用jmeter中的xpath可以提取网页信息,试一试呗。下图为网页响应内容:
6.jmeter中在HTTP Request后加入post processors的Xpath Extractor,下图分别为提取IP地址和端口号,可以用开发者模式,直接提取xpath:
7.但是上面的仅能得到第一个出现的IP地址和端口号,于是加入计数器counter。
8.使用Xpath Extractor只是将IP地址和端口号写入变量,还得将变量写入文件,于是用到了post processors的BeanShell PostProcessor。
代码是百度后拿来主义,改了一下,可以用。
代码如下:
FileWriter fstream = new FileWriter("G:\\Jmeter_learn\\Project\\test0323\\xicai_IP.csv",true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(vars.get("ip_address")+","+vars.get("port")+"\r");
out.close();
fstream.close();
9.使用beanshell提取后的csv如下
10.到此,IP地址爬取完毕,将IP地址和端口号参数化就可投票。
【注意事项】
(1)取IP地址时,不可频繁的请求代理网站,一定要加请求间隔且时间不要太短,会被封的;
(2)http head manager 中User-Agent需多模拟几个浏览器;
(3)免费IP地址可用性很差,可以多尝试其他多个不同网站的代理。