ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

go-cqhttp 滑块验证码通关指南:登录风控原理、Ticket 抓取与扫码替代方案

go-cqhttp 滑块验证码通关指南:登录风控原理、Ticket 抓取与扫码替代方案 后端即时通讯API网关【免费下载链接】go-cqhttpcqhttp的golang实现轻量、原生跨平台.项目地址https://gitcode.com/gh_mirrors/go/go-cqhttp点击查看免费下载本文以仓库文档 docs/slider.md 为核心脉络围绕 go-cqhttp 在陌生设备/IP 登录时遭遇 QQ 滑块验证码当前上网环境异常的成因、go-cqhttp 底层的滑块处理机制以及官方给出的两种临时应对方案浏览器抓包提取 Ticket、Windows 专用工具展开同时结合当前仓库源码补充实现细节、二维码扫码替代路径与签名服务器配置帮助读者在理解原理的基础上完成登录。一、背景为什么登录时会遇到滑块验证码根据 docs/slider.md 的说明由于腾讯TX最新的限制所有协议在陌生设备/IP 登录时都有可能被要求通过滑块验证码否则登录会直接报出当前上网环境异常的错误。文档强调了一个关键的技术事实滑块验证码与 QQ 本体的登录协议相互独立因此 go-cqhttp 无法像处理账号密码那样直接处理并提交滑块验证码必须先在浏览器中通过验证再抓包获取验证结果中的Ticket提交给 go-cqhttp 完成登录。⚠️ 重要提示文档开头已标注该文档已过期。在最新版本中可以直接使用手机扫描二维码通过验证无需再抓包或使用第三方工具。这一变化在当前仓库的登录源码中可以得到印证详见下文扫码登录替代路径一节。因此本文所讲的抓包与工具方案更适合作为历史环境或特殊场景下的备选方案。二、源码视角go-cqhttp 内部如何处理滑块验证码在进入两种方案之前先看 go-cqhttp 在代码层面是如何识别与响应滑块验证码的这有助于理解后续抓包与提交操作的本质。2.1 登录响应处理器识别滑块并进入 Ticket 流程登录流程的核心在 cmd/gocq/login.go 的loginResponseProcessor函数中。它在一个for循环里持续处理登录响应当服务端返回SliderNeededError时case client.SliderNeededError: log.Warnf(登录需要滑条验证码, 请验证后重试.) ticket : getTicket(res.VerifyUrl) if ticket { log.Infof(按 Enter 继续....) readLine() os.Exit(0) } res, err cli.SubmitTicket(ticket) continue即提示用户登录需要滑条验证码→ 调用getTicket获取验证码地址并等待用户提交Ticket→ 拿到非空Ticket后调用cli.SubmitTicket(ticket)提交 →continue重新进入循环检查登录结果。如果拿到的Ticket为空程序会提示按 Enter 继续并退出等待用户重新启动登录流程。2.2 getTicket两种获取 Ticket 的方式getTicketcmd/gocq/login.go是两种方案的分叉点它在启动时会要求用户选择1. 自动提交 2. 手动抓取提交选择 1自动提交go-cqhttp 会将验证码地址重写为项目提供的验证码中转服务源码中为https://captcha.go-cqhttp.org/captcha?id...然后每秒轮询一次fetchCaptchacmd/gocq/login.go最长等待 120 秒一旦服务端返回了ticket字段就立即自动提交无需手工复制粘贴。选择 2手动抓取提交go-cqhttp 只打印验证码地址请前往该地址验证 - %v然后等待用户通过浏览器完成验证、抓包提取Ticket后在终端粘贴对应源码中的readLine()读取输入。无论哪种方式最终提交的Ticket都来自浏览器端滑块验证成功的返回结果。2.3 扫码登录文档所说最新版直接扫码的代码依据文档标注最新版本下可直接使用手机扫描二维码通过验证对应的正是qrcodeLogincmd/gocq/login.go调用cli.FetchQRCodeCustomSize拉取二维码写入qrcode.png文件同时在终端用黑白像素块直接打印二维码printQRCodecmd/gocq/login.go循环调用QueryQRCodeStatus轮询扫码状态依次处理扫码被取消二维码过期扫码成功请确认登录已确认等状态用户手机确认后调用QRCodeLogin完成登录并再次进入loginResponseProcessor处理最终结果。此外在登录成功之后cmd/gocq/main.go代码会执行cli.AllowSlider true表示后续运行期间允许滑块相关的协议行为。也就是说只要 go-cqhttp 版本足够新直接走扫码登录即可绕过滑块验证码这也是官方文档建议优先采用的方式。三、方案A自行抓包获取 Ticket完整教程如果你需要走账号密码登录、且无法扫码例如协议不支持二维码登录参见 cmd/gocq/main.go 中当前协议不支持二维码登录的提示则可以按下面的抓包步骤手动提取Ticket。以下以Microsoft Edge浏览器为例Chrome操作同理。如果你已经熟悉浏览器抓包可以略过细节直接抓取cap_union_new_verify的返回值提取其中的Ticket字段并在 go-cqhttp 命令行中提交即可。步骤 1获取滑块验证码地址在 go-cqhttp 提示需要滑块验证码时终端会打印一行验证地址源码中的请前往该地址验证 - %v。选择方案A时在getTicket的交互提示中应输入2手动抓取提交然后将终端打印的链接复制在浏览器中打开。步骤 2打开开发者工具先别滑动浏览器打开验证码页面后不要立刻滑动先按下键盘右上角退格键上方的F12打开开发者工具。步骤 3定位到 Network 选项卡点击Network选项卡某些浏览器中显示为网络。随后点开Filter过滤器按钮确保能看到下方的过滤工具栏并勾选Preserve log保留日志红框所示防止页面跳转导致请求记录被清空。步骤 4滑动并通过验证码此时再去页面中滑动滑块、完成验证。验证成功后回到开发者工具可以看到网络请求列表中已经多出了若干请求。步骤 5过滤出目标请求如果此时有多个请求不用慌张——使用刚才打开的Filter输入框输入关键字cap_union_new列表就只会剩下一个匹配请求即cap_union_new_verify相关的验证接口。步骤 6在 Preview 中提取 Ticket点击该请求打开Preview选项卡可以看到一个标准的JSON返回体。在其中找到ticket字段复制它的值。步骤 7回填 go-cqhttp回到 go-cqhttp 的命令行窗口此时它正等待你输入 ticket对应源码中请输入ticket (Enter 提交)的提示将复制到的ticket值粘贴进去并回车即可通过滑块验证、完成登录。四、方案B使用专用工具适合 Windows 用户如果觉得抓包过于繁琐文档还提供了第二个方案使用专门的滑块处理工具。该方案需要一台可以操作的 Windows 电脑。从原文档提供的下载渠道蓝奏云 / Google Drive下载并解压专用工具注上述渠道为文档撰写时提供的历史链接可能已失效请以社区最新发布的工具为准。打开 go-cqhttp在出现滑块验证码交互提示时选择2手动抓取提交终端会打印一段ID。将打印的ID复制粘贴到专用工具的输入框中。点击OK并处理滑块验证。注意OK 按钮的响应可能稍微慢一点请不要多次点击耐心等待其处理完成。验证通过后 go-cqhttp 即完成登录。方案B的本质与方案A相同通过专用工具代替人工抓包把浏览器端的验证结果Ticket转交给 go-cqhttp。文档建议如果有一台运行 Windows 的 PC/Server 且不会抓包操作优先使用方案B。五、更现代的替代路径与配套配置5.1 优先扫码登录如第一节所述文档已声明最新版本下可直接使用手机扫描二维码通过验证。在 cmd/gocq/main.go 中可以看到当账号密码未配置uin 0或密码为空且未开启加密时程序会提示账号密码未配置, 将使用二维码登录直接走qrcodeLogin流程。新版本遇到滑块验证码时扫码登录是最省事、最稳妥的路径。5.2 Web 端验证码管理 API对于部署在服务器上、不方便本地操作的场景仓库还提供了两个管理接口见 docs/adminApi.mdadmin/get_web_writeGET拉取验证码/设备锁。返回ispic是否是验证码类型true为验证码false为设备锁与picbase64验证码图片的 base64 内容加上 data 头放入img标签即可显示admin/do_web_writePOST formdata提交输入内容参数input为验证码/设备锁的答案。这两个接口与滑块/图形验证码、设备锁的远程查看 提交答案场景直接相关适合将验证码处理接入 Web 控制台或自动化脚本。5.3 签名服务器应对 45 错误码与风控滑块验证码并非唯一可能阻断登录的风控手段。在 cmd/gocq/login.go 中当登录返回错误码45时源码提示你的账号被限制登录, 请配置 SignServer 后重试未配置签名服务器时cmd/gocq/main.go 也会警告这可能会导致登录 45 错误码或发送消息被风控。签名服务器的配置位于 modules/config/default_config.yml 的account.sign-servers段相关参数如下配置项默认值说明sign-servers两个url: -占位数据包签名服务器列表第一个为主签名服务器后续为备用兼容 unidbg-fetch-qsign不建议超过 5 个url-签名服务器地址如http://127.0.0.1:8080或线上地址key114514签名服务器所需的 apikey服务端版本 1.1.0 及以下无效authorization-服务端要求的鉴权头如Bearer xxxxrule-change-sign-server1判断签名服务不可用需切换的额外规则0不设置仅请求无结果时判定不可用1获取到的 sign 为空即切换2sign 或 token 为空即切换max-check-count0连续寻找可用签名服务器最大尝试次数为0时连续 3 次找不到则固定使用主服务器sign-server-timeout60签名服务请求超时时间秒is-below-110false签名服务器版本是否在 1.1.0 及以下低版本建议升级到 1.1.6auto-registerfalse实例可能丢失签名为空时是否自动重新注册auto-refresh-tokenfalsetoken 过期后是否立即自动刷新refresh-interval40定时刷新 token 间隔分钟建议 30~40不可超过 60从 modules/config/config.go 可以看出上述字段对应Account与SignServer结构体。运行期签名服务器的选取与切换逻辑实现在 cmd/gocq/qsign.gogetAvaliableSignServer会并发检查所有已配置服务器asyncCheckServer通过GET 服务器地址并校验返回code 0判断可用性然后选用第一个可用的服务器signStartRefreshToken 则按配置的间隔定时刷新签名 token并在主服务器恢复可用时自动切回。5.4 设备信息device.json与相关错误码另外两个常见的登录错误码与设备信息有关cmd/gocq/login.go235设备信息被封禁源码提示请删除 device.json 后重试237登录过于频繁需在手机 QQ 上按提示完成认证后等待一段时间再试。设备信息文件device.json在 cmd/gocq/main.go 中生成或加载不存在时自动生成随机设备信息存在时读取其中的协议与设备参数用于登录。六、常见问题与排查建议现象可能原因与建议报错当前上网环境异常陌生设备/IP 触发了滑块验证码风控按上文方案A或方案B通过滑块验证或改用最新版本直接扫码登录粘贴 ticket 后仍提示失败确认ticket字段复制完整Ticket 与本次验证码会话绑定过期后需重新走一遍抓包流程提示验证超时自动提交模式最长轮询 120 秒见 cmd/gocq/login.go超时未拿到 ticket 会返回空并触发退出提示需重启登录流程登录返回 45 错误码账号被限制登录按提示配置签名服务器sign-servers后重试登录返回 235设备信息被封禁删除device.json后重启登录返回 237登录过于频繁先在手机 QQ 完成认证并等待一段时间无终端输入交互未检测到输入终端时程序会自动选择默认项readIfTTY见 cmd/gocq/login.go请在有交互终端的条件下运行七、结语滑块验证码是 QQ 登录风控体系的一部分与登录协议相互独立因此 go-cqhttp 无法直接处理需要通过浏览器验证后提取Ticket提交。仓库文档 docs/slider.md 给出的方案A浏览器抓包提取cap_union_new/cap_union_new_verify返回值中的ticket与方案BWindows 专用工具均是有效的临场手段而当前版本的 go-cqhttp 已经支持直接扫码登录通过验证是最省力的首选路径。若在登录或日常运行中遇到 45 错误码与消息风控则需结合 modules/config/default_config.yml 中的签名服务器配置与 cmd/gocq/qsign.go 的切换逻辑进行排查。相关的完整登录处理逻辑可继续阅读 cmd/gocq/login.go 与 cmd/gocq/main.go。赞分享后端即时通讯API网关【免费下载链接】go-cqhttpcqhttp的golang实现轻量、原生跨平台.项目地址https://gitcode.com/gh_mirrors/go/go-cqhttp点击查看免费下载相关推荐AutoClip B站登录替代方案全指南Cookie导入、账号密码与扫码登录的选型与实现原理AutoClip B站登录替代方案全指南Cookie导入、账号密码与扫码登录的选型与实现原理 本文以 AutoClipAI 智能高光提取与剪辑二创工具中的人工智能AI 应用大模型音视频短视频后端前端桌面应用Windows 11优化终极指南用Win11Debloat一键提升电脑性能51%Windows 11优化终极指南用Win11Debloat一键提升电脑性能51% 你是否感觉Windows 11越来越臃肿开机缓慢内存占用高还有各种烦人桌面应用CLIRedwood dbAuth 免密登录Passwordless实战指南用邮箱验证码替代密码Redwood dbAuth 免密登录Passwordless实战指南用邮箱验证码替代密码 导读 本指南以 Redwood 内置的 dbAuth 认证方案后端前端Web框架开发工具上一篇终极指南如何快速解析国内地址的10个实用技巧下一篇Vanna终极指南5步实现智能SQL生成与数据洞察创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表