手机号查QQ号 3 分钟跑通:phone2qq 从原理到批量查询教程
【免费下载链接】phone2qq项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq
只记得手机号却忘了 QQ 号?开源项目 phone2qq 用纯 Python 模拟 QQ 登录协议实现手机号查QQ号:改一行手机号、跑一条命令,返回数字就是关联的 QQ 号,返回 False 表示查不到,全程零第三方依赖。
⚖️ 官方找回走几道验证,phone2qq 只走三步
先看清它和常规找回路径的差别,再决定值不值得折腾:
| 维度 | phone2qq | 官方账号找回 |
|---|---|---|
| 操作 | 改手机号 → 运行 → 出结果,共 3 步 | 短信验证、好友辅助等多道流程 |
| 耗时 | 秒级到分钟级 | 通常 5 分钟起步,验证卡壳更久 |
| 自动化 | 可脚本化、可批量 | 每个号都要人工走一遍 |
| 前提 | 目标账号已开启手机号登录 | 至少一种验证手段可用 |
| 稳定性 | 逆向协议,随时可能失效 | 官方维护,长期稳定 |
一句话:它赌的是"快"和"能写脚本",代价是协议一变就罢工——作者在 README 里也注明"该方法可能已经失效"(2016 年)。
📦 项目全貌:两个文件、零依赖
phone2qq 的全部家当就这么点:
| 文件 | 角色 | 规模 |
|---|---|---|
| qq.py | 主程序:QQLogin 类负责构造报文、收发 UDP、解析结果 | 200 行出头 |
| tea.py | TEA 加密算法,只暴露 encrypt / decrypt 两个函数 | 70 多行 |
依赖只有 Python 3 标准库(socket、hashlib、struct、ctypes),不装任何第三方包,环境里有 Python 3 就能直接跑。
🔐 原理拆解:一个加密箱子,两次"报到"
TEA 加密可以理解成保险箱:手机号、密码摘要这些字段先塞进箱子、用密钥上锁再寄出,服务器回包也是一口锁着的箱子,必须用同一把钥匙打开。tea.py 里实现的就是 QQ 通讯在用的 TEA 变种:16 轮迭代、8 字节分组,轻量但足够打乱数据。
整个查询是两段 UDP 请求,相当于"先报到、再办事":
- 0825 报到(login0825):把 11 位手机号按协议拼装进报文,用固定密钥加密后发给服务器,换回三样东西——会话令牌 token0825、服务器时间 serverTime、服务器 IP serverIP。这一步没拿到正常响应,程序打印 0825 error 并放弃。
- 0826 办事(login0826):把令牌、服务器时间、服务器 IP 和一段密码摘要拼装进报文加密发出——密码位写死了占位值 123456,并不需要真实密码。服务器确认后从回包固定偏移处取出 16 进制 QQ 号,转成十进制返回;取不到就返回 False。
回包有两个解析分支(06 开头、fc 开头各对应不同偏移),后面排查"查出的号不对"时会用到。
🚀 首次查询三步跑通
第 1 步:拿到代码
git clone https://gitcode.com/gh_mirrors/ph/phone2qq cd phone2qq第 2 步:填手机号。打开 qq.py,在 QQLogin 类初始化处把默认值换成目标号码:
self.num = '10000000000' # 改成 11 位手机号第 3 步:运行
python3 qq.py打印一串数字就是关联 QQ 号,打印 False 就是查不到。不想走主入口的话,直接调用核心方法:
from qq import QQLogin login = QQLogin() print(login.getQQ('13800138000')) # 返回QQ号或False提醒一句:查询走的是真实登录握手流程,只对你自己名下或已获授权的号码做。
关键配置速查:平时改哪行、失效查哪行
qq.py 里 QQLogin 初始化暴露了这些参数(默认值较长,截断显示):
| 参数 | 默认值 | 含义 |
|---|---|---|
| num | '10000000000' | 要查询的 11 位手机号 |
| address | ('183.60.56.100', 8000) | 服务器 IP 与 UDP 端口 |
| fixedData | '0000044b…' | 报文固定填充字段 |
| hdKey | '0251ca4a…' | 设备标识密钥 |
| token0825 / serverTime / serverIP | 空串 | 0825 回包后自动回填,不用手填 |
日常使用只改 num 一行;当工具突然对所有号码都失效时,优先检查 address 里的服务器 IP 是否已更换——这是最常见的整体性失效原因。
批量查询:一个 for 循环,一条红线
查询逐号进行,天然适合批量。源码底部留着一段注释掉的示例,放开注释、换掉号段即可:
for i in range(10000): num = '1360106%04d' % i # 号段换成你的目标范围 qq = login.getQQ(num) if qq: print('%s >> %s' % (num, qq))红线只有一条:批量只查自己名下或已获授权的号码,无差别扫号属于滥用,别碰。
🩺 查询失败排查清单
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 打印 0825 error! | 第一步登录未获正常响应:协议更新或服务器不可达 | 先确认网络通、UDP 8000 没被拦;仍报错基本可判定协议已变,等上游更新 |
| 返回 False | 号码未开手机号登录、绑定关系已变更,或回包走了未覆盖的分支 | 核对号码为 11 位纯数字;对照 login0826 中 06 / fc 两个分支的偏移解析 |
| 查出的 QQ 号对不上 | 账号换绑过手机,拿到的是当前绑定关系 | 以当前绑定为准,历史绑定查不到 |
| 长时间无响应 | UDP 8000 出站被防火墙拦截 | 换网络环境或放行 UDP 出站 |
收尾:两条底线和一份学习材料
用之前把底线刻进去:
- 只查自己或已获授权的号码,尊重他人隐私,遵守当地法规
- 不用于商业爬取、不做无差别批量扫号
跑通之后有个高性价比的学习动作:通读 tea.py 的 70 来行代码,看一个 16 轮迭代、8 字节分组的对称加密如何在标准库之上落地——轮函数里位移、异或、加常量那套组合,是密码学入门很经典的样本。
【免费下载链接】phone2qq项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考