QQTZ:一个水怪的进化之旅

8/2/2021

# 一、初衷

QQTZ 是年少时的回忆。当时各路“水怪”,我也想争当做一个灌水大王。
现在 QQTZ 已彻底没落,成为灌水大王的念头一直未曾消散。
现各项资源都非常契合,遂开始进化。

秉持着增强专业技能、求索精神、和对编程的爱好,促使完成了这个项目。

# 二、V1.0

这是最初版 V1 , 只能应用于浏览器

# 观察到

回帖时,整个页面并不会全刷,只会在原来基础上追加 HTML。

# 实现方式

通过操作 DOM 的方式填写回帖内容,模拟点击回帖按钮,提交数据。

# 缺点

  1. 登录状态不可控
  2. 有并发限制:FORM并发限制 和 浏览器并发上限

# 其他

Form 表单有防抖限制,一个浏览器窗口每秒只能提交一次请求。
如果需要高并发,则需要多开窗口,非常损耗性能。

搜索得知常规浏览器限制同时最多六个请求在并发,但火狐浏览器可以修改请求上限。

Firefox 修改最大 TCP 并发连接数 (opens new window)

# 三、V2.0

作用于浏览器上的插件

# 打通任脉 Chrome DevTools, Copy 选项

在 Chrome DevTools 调试时发现 Network 下的所有请求都可以被原样复制
Cookie、Headers、Body 都是可以被复制拿到
比如点击 Copy as fetch 后,粘贴在控制台即可发送请求

copy
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 的局限性太大

  1. 无法自己启动
  2. 无法刷新

由于编写一个 Chrome extensions 难度较大
无意间想起 Tampermonkey 可以自己编写插件,简单易行
也和当前业务逻辑非常贴合也非常简单

编写第一个油猴脚本(Tamper monkey) (opens new window)

# 小周天成

通过 Chrome DevTools 和 Tampermonkey 的配合

  • 可自动登录
  • 可自动清理内存(刷新)
    • 并发时会产生大量积压的请求,积压的请求一多内存就会爆掉
    • 网速慢和 CPU 配置不高也会爆

刷新记录:
当日最高记录 280W 回帖 实际可以更高,12G内存爆掉过几次

# 不足

  1. 无法持久化登录、记录日志
  2. 内存易爆
  3. 论坛编码为 GBK,js 脚本无法解析 GBK
    • 代码里变量 Code 部分就是 GBK 编码后的内容,看上去比较奇怪

# 三、Last

作用于ECS上的NodeJS程序

这次有点类似于微服务的味道

  • 登录微服务,管理着登录日志
  • 发帖微服务,管理者发帖日志
  • 通过腾讯COS,存储着这些日志

# 功能模块

  1. 登录日志

    • 登录时间
    • 系统发帖量
    • 账户发帖量
    • 周期发帖增量 = 系统发帖量 - 上一次登录时系统发帖量
    • 周期每秒平均发帖量 = 周期发帖增量 / ( 当前时间 - 上一次登录时时间 )
    • 当天每秒平均发帖量 = 系统发帖量 / 已过时间
  2. 发帖日志

    • 时间
    • 运行次数
    • 发送量
    • 最快和最慢耗时
  3. 配置文件

    • 运行一次发送条数
    • 单条超时时间
    • 批次超时时间
    • 提交日志频率
    • 休眠时常
    • 登录频率
    • 发帖频率
  4. 观察到的

    • 请求并不是越多越好,网络抖动响应慢,会造成请求积压
    • 但是暴力堆积请求,又是总量最高的方式
  5. 记录

    • 现在账号T币在6000W左右,实际发帖也就是6000W
    • 账号发帖数在1000W,6000-1000=5000 这些可能被系统吞了
    • 最高一天在390W,可惜没破400W
    • 理想目标是500W,由于服务器在国外,跨境流量经常丢失
    • 近7天流量走势 Up:24G Down:204G
    • 现网站已瘫痪,无法访问到 😭 每天这么DDOS,估计是数据库炸了
    • 搜索引擎也没了,👴爷青结

# 四、项目地址

Last Updated: 4/13/2023, 5:49:15 PM