今天在 GitHub Trending 上看到一个有意思的项目:megadose/holehe,一句话描述它的核心价值——给你一个邮箱,它就能悄悄告诉你这个邮箱在 Twitter、Instagram、Snapchat 等 120 多个网站上是否注册过账号,而且对方完全不会收到任何提醒。
一、项目概述
Holehe 是一款用 Python 编写的开源 OSINT(开源情报)工具,核心能力是通过邮箱反向查询其注册过的网络账号。它的典型应用场景包括安全审计、数字足迹调查,以及渗透测试中确认目标在某站点是否"存在账户"。
项目的几个关键特性值得单独拎出来:
- 静默无感知:利用各站点的「忘记密码 / 注册判断」接口做推断,整个过程不会向目标邮箱发送任何通知邮件(作者专门在 issue #12 中确认过这一点)。
- 覆盖广:内置 120+ 站点模块,从社交平台(Twitter、Instagram、Snapchat)到电商、论坛、开发者工具(GitHub、Docker、Replit)一应俱全。
- 双形态:既可以命令行直接跑,也能作为 Python 库嵌入到自己的异步代码中。
- 取证友好:每个模块会以统一结构返回结果,甚至包含部分脱敏的找回邮箱、找回手机号等线索。
⚠️ 项目本身声明「Built for educational purposes only」,请务必在合法授权范围内使用。
二、技术原理
2.1 核心思路:借「忘记密码」做存在性推断
Holehe 并不去尝试登录,也不会爆破密码。它的判断逻辑建立在一个普遍存在的接口行为上:几乎所有站点在「忘记密码」或「注册」时,都会先校验邮箱是否已被占用——而返回的提示文案会因「已注册 / 未注册」而不同。
例如输入一个已注册邮箱走「找回密码」流程,站点可能返回「重置链接已发送」;输入一个未注册邮箱,则通常返回「该邮箱未注册」或允许继续注册。Holehe 针对每个站点,硬编码了两种响应的判别规则,从而推断出 exists 的真假。
这种方式的精妙之处在于:它读取的是站点公开接口的响应差异,既不登录也不打扰目标,因此天然地"静默"。
2.2 架构设计
每个站点对应一个独立的「模块」,模块统一实现 async 函数,签名形如:
async def snapchat(email, client, out):
...
email:待查询邮箱client:复用同一个httpx.AsyncClient(连接复用、带 cookie 会话)out:收集结果的列表,每个模块向其中追加一条标准字典
模块按检测方式分为三类(见 README 的 Modules 表):
| Method | 含义 | 示例站点 |
|---|---|---|
register | 通过注册接口判断邮箱是否已存在 | twitter, instagram, github |
password recovery | 通过找回密码接口判断 | adobe, mail_ru, ok.ru |
login / other | 登录页或其它方式 | snapchat, office365, protonmail |
2.3 统一的结果数据结构
无论模块内部怎么请求,最终都会向 out 写入一条结构一致的字典:
{
"name": "example",
"rateLimit": false,
"exists": true,
"emailrecovery": "ex****[email protected]",
"phoneNumber": "0*******78",
"others": null
}
字段含义:
name:站点模块名rateLimit:本次是否被限流(true 时需更换 IP 重试)exists:该邮箱在此站点是否注册emailrecovery:有时能拿回部分脱敏的找回邮箱phoneNumber:有时能拿回部分脱敏的找回手机号others:其它补充信息
2.4 并发模型
从 setup.py 的依赖可以看出来技术选型:
install_requires=["termcolor","bs4","httpx","trio","tqdm","colorama"]
httpx:异步 HTTP 客户端,支持连接池与超时控制trio:结构化并发库,负责调度所有站点的异步查询bs4:解析 HTML 响应,提取提示文案termcolor/colorama/tqdm:终端着色与进度条
核心调度基于 trio 的 nursery 并发地拉起上百个站点模块,再用 tqdm 渲染进度,整体跑完通常也就几秒到十几秒。
三、安装与快速开始
3.1 环境要求
- Python 3(README 示例基于 3.7+,Docker 镜像使用 3.11-slim)
3.2 安装方式(三种)
PyPI 安装(推荐)
pip3 install holehe
从源码安装
git clone https://github.com/megadose/holehe.git
cd holehe/
python3 setup.py install
Docker 运行
docker build . -t my-holehe-image
docker run my-holehe-image holehe [email protected]
四、使用方法与实战
4.1 命令行最简用法
holehe [email protected]
工具会用进度条逐一检测各站点,并标出该邮箱在哪些平台注册过。
4.2 作为 Python 库嵌入
由于每个模块都是标准 async 函数,可以只挑需要的站点、复用自己的 client 来跑,避免全量扫描:
import trio
import httpx
from holehe.modules.social_media.snapchat import snapchat
async def main():
email = "[email protected]"
out = []
client = httpx.AsyncClient()
await snapchat(email, client, out)
print(out)
await client.aclose()
trio.run(main)
这种方式特别适合在已有的调查流程里,只针对某几个高价值目标站点做定向查询。
五、常见问题与解决方案
Q1:运行后大量站点返回 rateLimit: true?
A:说明你的出口 IP 被目标站点限流了。README 的建议很直接——换 IP(如切换代理或网络环境)后再跑。
Q2:部分站点频繁限流(Modules 表里标 ✔ 的)?
A:表里 Frequent Rate Limit 为 ✔ 的站点(如 instagram、google、spotify、yahoo 等)本身风控较严,建议结合代理池或分布式执行,把请求打散。
Q3:想接入 Maltego 做可视化调查? A:作者另外提供了 holehe-maltego 转换(Transform),可把结果直接呈现在 Maltego 图谱里。
Q4:只想查几个特定站点,不想全量跑? A:直接用 4.2 的库调用方式,只 import 并 await 你关心的模块即可。
六、总结
Holehe 用一种"四两拨千斤"的思路——借各站点公开的「存在性校验」接口做推断——实现了对 120+ 平台账号足迹的静默反查,既不需要登录也不需要打扰目标。它的工程实现也很清爽:模块化站点检测 + trio 异步并发 + 统一结果结构,无论是命令行快速排查还是作为库嵌入取证流水线都很顺手。对于安全研究者、OSINT 爱好者而言,这是一把了解"数字足迹暴露面"的趁手工具——当然,请始终在合法合规的边界内使用它。