quelquun667/OSINT-Name-Checker
GitHub: quelquun667/OSINT-Name-Checker
一款多线程命令行工具,用于在 50 多个社交与开发平台上快速检查用户名是否存在,支持 OSINT 调查与用户名可用性检测。
Stars: 0 | Forks: 0
# OSINT 用户名检查器
一个快速、多线程的命令行工具,用于检查给定用户名是否存在于数十个热门网站(Instagram、GitHub、Reddit、TikTok、Twitch、YouTube、Steam 等)中。
它向每个网站的资料页面 URL 发送请求,并根据 HTTP 状态码和页面内容启发式规则,将结果分类为**已找到**、**未找到**或**不确定**。
## 免责声明
本工具仅供**教育和合法的 OSINT (开源情报) 目的使用** —— 例如,检查您自己的在线足迹、研究用户名可用性,或进行授权的安全评估。
- **请勿**使用此工具在未经他人同意的情况下对其进行骚扰、跟踪、人肉搜索或追踪。
- **请勿**以违反被检查网站服务条款的方式使用本工具。
- 您须对自己如何使用本软件以及遵守您所在司法管辖区的法律负全部责任。
- 本项目按“原样”提供,**不提供任何担保**,对于因使用本工具而导致的任何滥用或损害,作者**不承担任何责任或义务**。完整免责声明请参阅 [LICENSE](LICENSE)。
## 功能
- 根据可配置的网站列表 (`sites.json`) 检查用户名 —— 添加新目标无需修改代码。
- 并发检查(线程池)以快速获取结果。
- 结合状态码**和**页面内容启发式规则,减少“软 404”页面上的误报。
- 针对临时网络/服务器错误 (429, 5xx) 的退避重试逻辑。
- User-Agent 轮换,以减少简单的机器人拦截。
- 实时多列进度表(通过 [rich](https://github.com/Textualize/rich) 实现),在结果传入时同时显示所有网站的状态,并生成持久化的 `results.txt` 日志。
- **可点击的网站名称**:表格中的每一行(以及摘要中找到的每个帐户)都是一个指向被检查资料页面的终端超链接 —— 无需复制粘贴 URL。在支持该功能的终端(Windows Terminal、VS Code、iTerm2、GNOME Terminal 等)中有效;在不支持的终端中,它只会作为纯文本打印。
- **可选的无头浏览器深度检查**,适用于那些阻止纯 HTTP 请求,但仍可通过真实(未登录)浏览器访问来区分的网站 —— 目前支持 Instagram、Facebook、Reddit 和 Threads。在可用时会自动使用;请参阅[难以检测网站的深度检查](#deep-check-for-hard-to-detect-sites)。
- 交互模式(循环检查多个用户名)或单次 CLI 模式。
## 安装说明
需要 Python 3.8+。
```
git clone https://github.com/quelquun667/OSINT-Name-Checker.git
cd OSINT-Name-Checker
pip install -r requirements.txt
```
这足以运行该工具 —— 以上所有功能均可通过纯 HTTP 请求实现。可选的基于浏览器的深度检查(见下文)还需要额外的一次性步骤,该工具会在您首次以交互方式运行时主动引导您完成。
## 使用说明
交互模式(提示输入用户名,允许您连续检查多个):
```
python main.py
```
系统还会询问您将结果保存到哪个文件(按 Enter 键保持默认的 `results.txt`) —— 这有助于避免将不同会话的结果混入同一个日志中。
首次以交互方式运行时,它还会检查是否安装了用于深度检查的可选浏览器组件;如果没有,它会提示您下载它们(约 110MB,仅限一次 —— 请参阅[难以检测网站的深度检查](#deep-check-for-hard-to-detect-sites))。
直接 / 脚本模式:
```
python main.py -u -o my_report.txt --nsfw
```
- `-u`, `--username`: 要直接检查的用户名(跳过交互式提示,运行一次后退出)。
- `-o`, `--output`: 要追加结果的文件(默认:`results.txt`)。
- `--nsfw`: 同时检查 18+/成人网站。**默认禁用** —— 在交互模式下,除非传递此标志,否则系统会询问您(默认:否)。
- `--no-browser`: 完全跳过无头浏览器深度检查(Instagram/Facebook/Reddit/Threads 随后将显示为不确定,与未安装浏览器时相同)。适用于更快的运行速度。
在脚本模式 (`-u`) 下,该工具绝不会因大型下载而阻塞 —— 如果未安装浏览器组件,它只会打印一行提示并在没有它们的情况下继续运行。
结果将打印到控制台(带有颜色代码和实时进度指示器)并追加到选定的输出文件中。日志文件一旦超过 5000 行就会自动修剪,因此它不会无限增长。
## 支持的网站 (51 — 默认 50 个 + 1 个可选 18+)
```
Supported sites
├── Social Media (11)
│ Instagram†, TikTok, Facebook†, Threads†, Pinterest,
│ Twitter/X, Reddit†, Twitch*, YouTube, Snapchat, Telegram
│
├── Developer & Tech (5)
│ GitHub, Dev.to, Keybase, HackerNews, Disqus
│
├── Gaming (7)
│ Steam, Roblox, Kongregate, Chess.com, Lichess, osu!, Backloggd
│
├── Music & Audio (4)
│ SoundCloud, Spotify, Last.fm, Bandcamp
│
├── Creative & Portfolio (7)
│ Behance, Dribbble, Flickr, SlideShare, Vimeo, Instructables, DeviantArt
│
├── Blogging & Writing (5)
│ Medium, LiveJournal, AngelList*, ProductHunt, GoodReads
│
├── Commerce & Crowdfunding (4)
│ Etsy*, Cash.app, Patreon, Gumroad
│
├── Other (7)
│ About.me, Flipboard, Pastebin, Wikipedia, Letterboxd, MyAnimeList, Untappd
│
└── 18+ / Adult (1) — opt-in only, off by default, see --nsfw
Xvideos
* Currently unreliable — anti-bot walls these sites enforce make real vs.
fake indistinguishable via plain HTTP requests or a headless browser
(tried, see "How detection works" below); always reported as uncertain (~).
† Blocked via plain HTTP requests, but works via the optional headless-
browser deep-check (see below) — reported as uncertain (~) if that's
unavailable or disabled (--no-browser).
```
完整且权威的列表 —— 包括每个网站使用的确切 URL 模式和检测规则 —— 位于 [`sites.json`](sites.json) 中。
## 检测原理
每次检查都会查看 HTTP 状态码(`404` 或特定网站的 `error_code` 表示“未找到”),然后回退到扫描页面中的“未找到”短语 —— 可以是特定网站的 (`error_text`) 或是内置的通用列表 —— 这适用于即使在资料不存在时也返回 `200 OK` 的网站。跳出该网站的意外重定向也会被视为“未找到”。对于 `5xx`/`429` 响应,系统绝对不会妄加猜测;而是将其报告为**不确定**。有关确切的字段,请参阅下文的[添加新网站](#adding-a-new-site)。
少数条目使用网站自身的公共 API endpoint,而不是抓取 HTML,这与 Sherlock/Maigret 等工具使用的技术相同 —— 不需要 API key 或帐户,只需使用不同的 URL:TikTok 的 oEmbed endpoint,以及用于绕过 YouTube 同意墙的 cookie(请参阅下文的 `cookies` 字段)。
## 难以检测网站的深度检查
- **自动**:只要安装了浏览器组件就会使用,无需任何标志。使用 `--no-browser` 可跳过。
- **按需设置**:在交互模式下,如果尚未安装组件,系统会询问您一次是否下载它们(`playwright install chromium --only-shell`,约 110MB —— 这是轻量级的仅无头构建,而不是完整的浏览器安装)。
- **绝不阻塞自动化**:在 `-u` 脚本模式下,缺失的安装永远不会被自动下载 —— 您只会看到一行提示,并且运行会继续,这 4 个网站将被报告为不确定,这与该功能出现之前完全一样。
- **设计上线程安全**:Playwright 的 sync API 不适合同时从多个线程调用,因此所有浏览器调用都在一个专用的后台线程上运行;其余网站继续保持使用快速并发 HTTP 路径,互不干扰。
若要手动设置而不是通过提示进行设置:
```
python -m playwright install chromium --only-shell
```
## 添加新网站
网站在 [`sites.json`](sites.json) 中定义 —— 无需更改代码。每个条目如下所示:
```
{
"name": "GitHub",
"url": "https://www.github.com/{}",
"error_code": 404
}
```
- `url`: 使用 `{}` 作为用户名的占位符。
- `error_code` *(可选)*: 一个 HTTP 状态码(除了 404 之外),也表示“未找到”。
- `error_text` *(可选)*: 网站“未找到”页面中包含的子字符串列表,适用于即使资料不存在也会返回 `200 OK` 的网站。
- `found_text` *(可选)*: 子字符串列表,如果存在,则确认资料**存在** —— 适用于 JS 密集型网站,在这些网站中,真实的资料具有一个服务端渲染的标记(例如,包含用户名的 ``),但没有可靠的“未找到”文本可供匹配。使用 `{}` 作为用户名占位符。
- `match_title_only` *(可选)*: 当为 `true` 时,`error_text`/`found_text` 仅与页面的 `` 标签进行匹配,而不是整个正文 —— 适用于在每次加载页面时都会推送所有可能的 UI 字符串(包括听起来像“未找到”的样板文本)的网站。
- `cookies` *(可选)*: 随请求发送的 cookie 字典(例如,用于绕过 cookie 同意墙)。
- `nsfw` *(可选)*: 将网站标记为 18+;仅在传递了 `--nsfw` 或在交互式提示中被允许时才进行检查。
- `unreliable` *(可选)*: 将网站标记为当前无法通过纯 HTTP 请求进行检测;除非同时设置了 `requires_browser` 并且深度检查可用,否则其结果将始终被报告为不确定,而不是盲目猜测。配合 `unreliable_reason` 可记录原因。
- `requires_browser` *(可选)*: 仅在 `unreliable: true` 时有意义 —— 告知工具应在真实的无头浏览器页面加载上评估该网站的 `found_text`/`error_text`/`match_title_only` 规则,而不是基于原始 HTTP 响应(请参阅[难以检测网站的深度检查](#deep-check-for-hard-to-detect-sites))。
- `check_type` *(可选,仅供参考)*: 某些条目带有 `"status_code"` / `"message"` 标签以提高可读性。它对实际检查没有影响。
请优先提供从网站实际页面中复制的真实 `error_text`/`found_text` 字符串 —— 内置的通用回退列表是最后的手段,并且可能会产生误报/漏报。
## 验证网站列表是否仍然有效
当平台重新设计其页面或加强反机器人保护时,网站的检测可能会悄然失效。[`verify_sites.py`](verify_sites.py) 是一个维护脚本(不属于 CLI 的一部分),它使用已知的真实用户名和随机的虚假用户名检查 `sites.json` 中的每个条目,并报告哪些条目已失效:
```
python verify_sites.py
```
它还通过 [定时 GitHub Action](.github/workflows/verify-sites.yml) 每周自动运行一次,如果出现问题,它会自动创建或更新 issue。
## 准确性免责声明
本工具依赖于启发式方法(状态码、重定向目标和文本匹配),这些方法可能会在网站更改其布局或反机器人措施时失效。结果应被视为**指示性的,而非确定性的** —— 在得出结论之前,请务必手动验证。
## 报告问题
发现错误、崩溃或网站给出错误结果(误报/漏报)?请[创建一个 issue](https://github.com/quelquun667/OSINT-Name-Checker/issues/new/choose) —— 我们为错误报告和网站检测问题提供了模板。
## 许可证
在 MIT 许可证下分发 —— 详情请参阅 [LICENSE](LICENSE)。
标签:文档结构分析, 特征检测, 逆向工具