QQTZ:一个水怪的进化之旅
# 一、初衷
QQTZ 是年少时的回忆。当时各路“水怪”,我也想争当做一个灌水大王。
现在 QQTZ 已彻底没落,成为灌水大王的念头一直未曾消散。
现各项资源都非常契合,遂开始进化。
秉持着增强专业技能、求索精神、和对编程的爱好,促使完成了这个项目。
# 二、V1.0
这是最初版 V1 , 只能应用于浏览器
# 观察到
回帖时,整个页面并不会全刷,只会在原来基础上追加 HTML。
# 实现方式
通过操作 DOM 的方式填写回帖内容,模拟点击回帖按钮,提交数据。
# 缺点
- 登录状态不可控
- 有并发限制:FORM并发限制 和 浏览器并发上限
# 其他
Form 表单有防抖限制,一个浏览器窗口每秒只能提交一次请求。
如果需要高并发,则需要多开窗口,非常损耗性能。
搜索得知常规浏览器限制同时最多六个请求在并发,但火狐浏览器可以修改请求上限。
Firefox 修改最大 TCP 并发连接数 (opens new window)
# 三、V2.0
作用于浏览器上的插件
# 打通任脉 Chrome DevTools, Copy 选项
在 Chrome DevTools 调试时发现 Network 下的所有请求都可以被原样复制
Cookie、Headers、Body 都是可以被复制拿到
比如点击 Copy as fetch 后,粘贴在控制台即可发送请求

fetch("https://www.baidu.com/sugrec?prod=pc_his&from=", {
headers: {
accept: "application/json, text/javascript, */*; q=0.01",
"accept-language": "zh-CN,zh;q=0.9",
"sec-ch-ua":
'" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
"sec-ch-ua-mobile": "?0",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
},
referrer: "https://www.baidu.com/",
referrerPolicy: "unsafe-url",
body: null,
method: "GET",
mode: "cors",
credentials: "include",
});
通过 Copy as fetch 获取登录、发帖的 Body 传参,以及 Headers 配置项,完成请求编写
# 打通督脉 Tampermonkey 编写插件
最开始在 Chrome DevTools > Sources > Snippets 中写临时脚本,但是 Snippets 的局限性太大
- 无法自己启动
- 无法刷新
由于编写一个 Chrome extensions 难度较大
无意间想起 Tampermonkey 可以自己编写插件,简单易行
也和当前业务逻辑非常贴合也非常简单
编写第一个油猴脚本(Tamper monkey) (opens new window)
# 小周天成
通过 Chrome DevTools 和 Tampermonkey 的配合
- 可自动登录
- 可自动清理内存(刷新)
- 并发时会产生大量积压的请求,积压的请求一多内存就会爆掉
- 网速慢和 CPU 配置不高也会爆
刷新记录:
当日最高记录 280W 回帖
实际可以更高,12G内存爆掉过几次
# 不足
- 无法持久化登录、记录日志
- 内存易爆
- 论坛编码为 GBK,js 脚本无法解析 GBK
- 代码里变量
Code
部分就是 GBK 编码后的内容,看上去比较奇怪
- 代码里变量
# 三、Last
作用于ECS上的NodeJS程序
这次有点类似于微服务的味道
- 登录微服务,管理着登录日志
- 发帖微服务,管理者发帖日志
- 通过腾讯COS,存储着这些日志
# 功能模块
登录日志
- 登录时间
- 系统发帖量
- 账户发帖量
周期发帖增量
= 系统发帖量 - 上一次登录时系统发帖量周期每秒平均发帖量
= 周期发帖增量 / ( 当前时间 - 上一次登录时时间 )当天每秒平均发帖量
= 系统发帖量 / 已过时间
发帖日志
- 时间
- 运行次数
- 发送量
- 最快和最慢耗时
配置文件
- 运行一次发送条数
- 单条超时时间
- 批次超时时间
- 提交日志频率
- 休眠时常
- 登录频率
- 发帖频率
观察到的
- 请求并不是越多越好,网络抖动响应慢,会造成请求积压
- 但是暴力堆积请求,又是总量最高的方式
记录
- 现在账号T币在6000W左右,实际发帖也就是6000W
- 账号发帖数在1000W,6000-1000=5000 这些可能被系统吞了
- 最高一天在390W,可惜没破400W
- 理想目标是500W,由于服务器在国外,跨境流量经常丢失
- 近7天流量走势 Up:24G Down:204G
- 现网站已瘫痪,无法访问到 😭 每天这么DDOS,估计是数据库炸了
- 搜索引擎也没了,👴爷青结