它是谁:一句话,三种用法
先把期待校准。它不是黑客工具,也不是找人神器;它是一台「ID 存在性批量查询机」。用对了省半天,用错了白忙。
三个真实场景,对上号再往下读
| 场景 | 你做的那件事 | 产出物 |
|---|---|---|
| 自我盘点 | 把自己的三个常用 ID 一起丢进去,看哪年哪月在哪个站手滑注册过,哪些该注销。 | 一份「我的数字资产清单」,含待清理项 |
| 品牌 / 商标保护 | 查你的品牌名在 482 个平台有没有被人抢注,抢注的挑出来做记录。 | 一份抢注线索表,可直接去投诉 |
| 账号同名溯源 | 同一个 ID 在 A 站和 B 站是不是同一个人?看交集与自述是否互证。 | 一份「疑似同一人」假设 + 待验证清单 |
读之前先记住这一句
sherlock 给出的每一条命中,都只是「这个 ID 在这个站存在」,不等于「这是同一个人」。中间那道坎要靠你自己交叉验证 —— 第 07 节专门讲这件事,那是整页里最值钱的部分。
履历年表:七年,一个人的项目长成基础设施
全部来自仓库公开数据(GitHub API,2026-11-11 复核)。数字会动,结构不会。
requests-futures 做并发探测,加 --tor / --unique-tor,加 CSV / XLSX / JSON 三种导出。站点表从几十个扩到三百多,社区开始按平台提交 PR。data.json,判定逻辑抽象成 engine + errorType 两层,从此加一个网站不用改 Python。档案卡 / 冷数据
| 仓库 | github.com/sherlock-project/sherlock |
| 开源协议 | MIT —— 可商用、可改、可闭源分发,只需保留版权声明 |
| 语言 / 依赖 | Python(^3.9);requests · requests-futures · pandas · openpyxl · PySocks · stem · colorama · certifi · tomli |
| 当前版本 | v0.16.2(2026-09-08);sherlock --version 可自检 |
| 站点表 | sherlock_project/resources/data.json,实测 482 条 |
| 官方站 | sherlockproject.xyz |
| 判定引擎 | status_code(看 HTTP 状态码)/ message(看页面关键词)两派 |
它怎么工作:三步,没有任何魔法
看懂这一段,你才会知道结果为什么会误报,也才知道该怎么改。绝大多数人跳过这节,然后在第 07 节栽跟头。
拼 URL:拿模板套用户名
站点表里每个平台都写了一行模板,比如 https://github.com/{username}。它把你的用户名填进去,得到一个候选地址。
发请求:并发扫,不逐个等
482 个地址不是排队问的。它开一个线程池(requests-futures)同时发,默认超时 60s 可调(--timeout),遇到 429 会退避重试。
判真伪:两派判定法
回来之后怎么算「存在」?分两派,见下表。
| errorType | 判定逻辑 | 典型站点 | 准不准 |
|---|---|---|---|
| status_code | HTTP 200 → 存在;404 → 不存在;其他码按站点定义处理 | GitHub、Reddit、多数标准站 | 最可靠 |
| message | 页面里出现某段「查无此人」的固定文案(errorMsg)→ 不存在;否则算存在 | 把 404 也回成 200 的站,如部分国内平台 | 易误报 |
| + regexCheck | 先按正则校验用户名格式,不合规直接跳过,避免无效请求 | 用户名规则严的站 | 省时间 |
站点表里一条记录长这样(真实字段结构):
{
"GitHub": {
"url": "https://github.com/{}",
"urlMain": "https://github.com",
"username_claimed": "blue",
"username_unclaimed": "thisuserdoesnotexist1234567890",
"errorType": "status_code"
},
"某国内平台": {
"url": "https://example.com/u/{}",
"errorType": "message",
"errorMsg": "用户不存在",
"regexCheck": "^[A-Za-z0-9_-]{3,20}$"
}
}
为什么要看懂这两行
username_claimed 和 username_unclaimed 是内置的自检样本 —— 项目 CI 会拿这两个假名去跑,确认站点规则没坏。你也能这么用:拿「一个肯定存在的名字 + 一串肯定不存在的乱码」各跑一次,两个结果都符合预期,说明这个站的规则是准的;否则它的命中一律不可信。这是全网最简单有效的规则校准法。
装:四条路,按你的机器挑一条
四条都验过。装完必须跑那条「三秒验证」,不然后面全是瞎猜。
路线 A | pipx(推荐,隔离最干净)
pipx 给每个 CLI 工具单独开虚拟环境,不污染你的主 Python。装完直接在任意目录敲 sherlock。
# 1. 装 pipx(已装可跳过) python3 -m pip install --user pipx python3 -m pipx ensurepath # 2. 装 sherlock pipx install sherlock-project # 3. 验证(必须看到版本号) sherlock --version
路线 B | pip(最直接,一行)
pip install sherlock-project # 若提示 command not found,说明 Scripts 目录不在 PATH,改用模块方式跑: python3 -m sherlock_project --version
路线 C | Docker(不想动本机环境)
# 拉镜像 docker pull sherlock/sherlock # 跑一次:把结果写回当前目录(-v 挂载是必须的,否则报告留在容器里随它一起消失) docker run --rm -v "$PWD/sherlock-results:/out" sherlock/sherlock \ --folderoutput /out yourname
路线 D | 源码(要改站点表就走这条)
git clone https://github.com/sherlock-project/sherlock.git cd sherlock python3 -m pip install -r requirements.txt python3 -m sherlock_project yourname # 想加自己的站?直接编辑这个文件,不用碰 Python: # sherlock_project/resources/data.json
Windows 用户注意两件事
① 用 PowerShell 或 Git Bash,别用老 cmd,中文输出会乱码;
② 如果 sherlock 命令找不到,八成是 ...\Python3xx\Scripts 没进 PATH —— 用 python -m sherlock_project 立刻绕过,不必折腾环境变量。
三秒验证:装对了没有
# 拿官方自检样本跑,理论上只有 1 个站会命中 sherlock --site GitHub blue # 期望输出(大意): # [*] Checking username blue on: # [+] GitHub: https://github.com/blue
参数全表:17 个,一个不多
这是 sherlock --help 的完整清单,逐条给了人话解释和真实用法。背下画星号的五个就够了。
| 参数 | 常用 | 它到底干什么 |
|---|---|---|
| USERNAMES ... | ★★★ | 位置参数,可一次给多个:sherlock aa bb cc。这是唯一必填项。 |
| --site NAME | ★★★ | 只查指定站点。排障、复现、单点复核全靠它;可写多个。 |
| --timeout N | ★★★ | 单站超时秒数(默认 60)。国内网络建议 --timeout 15,把慢站直接放掉,整体快一倍。 |
| --folderoutput DIR | ★★ | 批量查时按用户名分文件夹输出,一个名字一个文件,不打架。 |
| --output FILE | ★★ | 把报告写到指定路径。只对单个用户名有效,多名字请用 folderoutput。 |
| --csv | ★★ | 额外产一份 CSV,扔进表格就能筛、能排序、能发人。 |
| --xlsx | ★★ | 额外产一份 Excel(依赖 pandas + openpyxl,装包时已带上)。给不写代码的人看,这个最省事。 |
| --json FILE | ★ | 结构化结果,给下游脚本吃。想自动化就选它。 |
| --print-found | ★★ | 只打印命中的,不刷屏。482 个站扫下来,这一项能省掉你 90% 的滚屏。 |
| --print-all | ★ | 连未命中的也打出来,用于确认「扫到了但确实没有」,写报告举证据时有用。 |
| --no-color | ★ | 关彩色。输出重定向到文件、或日志系统里出现 [32m 这类乱码时,加它。 |
| --browse | ★ | 扫完自动开浏览器,把命中的链接逐个打开。人工复核时省一次复制粘贴。 |
| --proxy URL | ★★ | 走代理,如 socks5://127.0.0.1:7890。国内网络不通时这是关键一票。 |
| --tor | ★ | 所有请求走 Tor(需本机 tor 跑在 9050)。慢,482 站可能要十几分钟。 |
| --unique-tor | ★ | 每个请求换一条 Tor 链路。防限流最强,也最慢,只在对单一站点密集复核时用。 |
| --nsfw | — | 把成人站点纳入扫描范围。默认排除。 |
| --local | — | 强制读本地 data.json,不检查上游更新。离线、内网、要复现历史结果时用。 |
| --verbose / --version | — | 调试详情 / 打版本号后退出。 |
两个最容易被忽略、但最好用的组合
① --print-found --csv --timeout 15 —— 日常三件套:不刷屏、能进表格、不卡死。
② --site GitHub --site Reddit —— 先只查这两家(判定最准),确认值得深挖了再放开全站,省时间。
七套配方:复制就能跑
从「就查一个人」到「批量出 Excel 报告」。每条都标注了耗时预期和适用场景,按需取。
配方 1 | 最小可用:查一个人
sherlock yourname --print-found --timeout 15
屏幕最后会给你一个 yourname.txt,里面是命中的全部链接。这是 90% 的人需要的全部。
配方 2 | 一次查五个 ID(自我盘点用这个)
sherlock jiangtian wuchenge nange old_id1 old_id2 \
--folderoutput ./osint-2026 --csv --print-found --timeout 15
五个名字,五个文件夹,五份 txt + csv,互不覆盖。自我盘点就照这个跑,把你能想起来的旧 ID 全塞进去。
配方 3 | 只查准的两个站(先探路,别一上来扫全站)
sherlock yourname --site GitHub --site Reddit --print-all
配方 4 | 出 Excel 交给不写代码的人
sherlock yourname --xlsx --csv --print-found -o ./报告
得到 报告.txt / 报告.csv / 报告.xlsx 三件套。xlsx 里是标准三列,直接加筛选、冻结首行就能发。
配方 5 | 走代理(国内网络的救星)
# 先确认代理端口活着(Clash 默认 7890,其他客户端看设置) curl -x socks5h://127.0.0.1:7890 -I https://github.com --max-time 8 # 通了再跑 sherlock yourname --proxy socks5://127.0.0.1:7890 --print-found --timeout 20
配方 6 | Tor(不想让目标站看到你的 IP)
# macOS:brew install tor && brew services start tor # Linux:apt install tor && systemctl start tor sherlock yourname --tor --print-found --timeout 30 # 每个请求换链路(极慢,只在对单站密集查询时用) sherlock yourname --site GitHub --unique-tor
配方 7 | 校准某站的规则是否可信(复核前的必做动作)
# 一正:肯定存在的名字(GitHub 官方叫 blue) sherlock blue --site GitHub --print-all # 一反:肯定不存在的乱码 sherlock zzq9x8v7u6t5s4r3q2p1 --site GitHub --print-all # 一正一反都对,这个站的判定才可信;错一个,它的命中全部打问号
结果怎么读:从「有账号」到「是本人」,中间隔着四次验证
这是全页最重要的一节。工具跑完 20 秒,剩下的判断要花 20 分钟 —— 而结论的可信度,全在这 20 分钟里。
先认识报告长什么样
| 符号 | 含义 | 该怎么处理 |
|---|---|---|
| [+] | 命中:该用户名在此站存在 | 记下来,进下一步验证。先别下结论 |
| [-] | 未命中:不存在 | 排除。若你确定本人有号,说明是判定规则坏了,跑配方 7 |
| [?] | 超时 / 被限流 / 需要登录 | 不是「没有」,是「没问到」。加代理或降超时重跑,别当结论 |
四次验证,一次比一次硬
第一验:头像 / 昵称 / 简介是否互指
同一个 ID 在三个站,如果三处都写着同一个邮箱、同一个站外链接、同一个头像哈希,可信度立刻上一档。只看 ID 相同,不算证据。
第二验:找「不可伪造的交叉引用」
某站简介里写了你的个人网站,你的网站上又挂着那个站的链接 —— 这叫闭环,几乎无法伪造。反之,两个站各自独立、内容毫无交集,就只是同名。
第三验:时间线是否自洽
注册时间、发帖节奏、语言习惯(简体 / 繁体 / 中英混写)、作息时区。一个声称 2015 年就在用的账号,如果平台 2018 才上线,直接出局。
第四验:内容指纹
口头禅、排版习惯、标点偏好(全角还是半角)、常用表情、错别字模式。这一条最玄但最准 —— 同一套公众号排版样式,比任何 ID 都更能证明「是这个人」。
误报的三大来源(照这张表排,八成误报当场消失)
一句可直接抄进报告的话
「本清单仅证明该用户名在所列平台存在,不构成身份同一性结论。每条命中均经【交叉引用 / 时间线 / 内容指纹】三项之一以上验证,验证状态见备注列。」 —— 写上这句,你的报告立刻从「搜了一下」变成「做过核查」。
想更硬:把结果叠成一张表
sherlock 只给「有/没有」。要出判断,手工补三列,可信度就直接可视化了:
| 平台 | 链接 | 互指证据 | 时间线自洽 | 判定 |
|---|---|---|---|---|
| GitHub | github.com/xxx | 简介里挂了个人站,域名一致 | 2019 起,早于博客上线 | 同一人 |
| Telegram | t.me/xxx | 群里发言提到同一课程名 | 2023 起,吻合 | 高度疑似 |
| reddit.com/u/xxx | 无 | 2014 起,早于其他痕迹 | 同名待查 | |
| 某论坛 | forum/xxx | 无,且语言风格不符 | 不吻合 | 排除 |
排障十条:按顺序试,别乱装东西
这十条覆盖了绝大多数人的卡点。每条都给了判定信号 —— 对上号再动手。
| 症状 | 真因 | 解法 |
|---|---|---|
| command not found: sherlock | Python 的 Scripts 目录不在 PATH | 改用 python3 -m sherlock_project,一步绕过 |
| 大面积 Timeout | 目标站在墙外 / 本地无代理 | 加 --proxy,并把 --timeout 15 降下来,让慢站快速出局 |
| 大面积 429 / 403 | 被目标站限流,或请求特征太像机器人 | 降低并发(分 --site 分批跑)、加 --unique-tor、隔几小时再跑 |
| SSL CERTIFICATE_VERIFY_FAILED | 证书链旧 / 代理中间人 | pip install -U certifi;代理软件里开「信任证书」 |
| 中文用户名全无结果 | URL 编码未处理,或站点本就只收英文 ID | 这属于正常现象,多数平台用户名规则只允许 [A-Za-z0-9_-] |
| --xlsx 报错 ModuleNotFound | pandas / openpyxl 没装 | pip install pandas openpyxl,或直接改用 --csv |
| 输出里全是 [32m 之类乱码 | 彩色控制符被写进了文件 | 加 --no-color |
| 结果比上次少很多 | 上游站点规则没跟上站点改版 | pip install -U sherlock-project;或用 --local 锁定旧表复现 |
| 想查的站不在 482 里 | 表里没收录 | 自己往 data.json 加一条(照第 03 节的字段结构抄),几十秒的事 |
| 扫完卡住不动 | 个别站挂起,吃满超时 | Ctrl+C 后分批跑,先 --site 定位是哪个站拖的 |
一个反直觉的坑
「跑得快」不等于「结果好」。把 --timeout 压到 3 秒,那些本来就慢的站会全部变成 [?] —— 你以为它们「没有」,其实是「没问到」。15 秒是速度与完整性的平衡点,再往下压就要在报告里注明「部分站点未完成探测」。
红线与边界:能查 ≠ 该查
这工具之所以能被讨论,是因为它只碰公开信息。越过这条线,它就从「调研」变成「骚扰」,从民事变成刑事。
可以做的
- 查自己的 ID,做数字资产盘点与清理
- 查自己品牌 / 商标是否被抢注
- 对公开身份的机构、公众人物做公开信息核查(记者、研究场景)
- 企业做自身暴露面自查(员工用公司名注册了哪些公开账号)
- 学术研究,且不指向可识别的个人
不能做的
- 跟踪、骚扰、报复特定个人 —— 这是最常见也最严重的误用
- 人肉未成年人、家庭住址、工作单位
- 把结果公开挂人、发到群里「审判」
- 用结果撞库、猜密码、社工 —— 直接触碰《刑法》285 条
- 商业爬取后转卖个人信息 —— 违反《个人信息保护法》
三条法律坐标(够用版,不构成法律意见)
- 《个人信息保护法》:可识别到特定自然人的信息都算个人信息。公开可得 ≠ 可随意收集、使用、传输。处理需有合法性基础(同意 / 履行合同 / 公共利益等)。
- 《刑法》第 253 条之一:非法获取、出售或提供公民个人信息,情节严重即入刑。「我从公开网站拿的」不是免罪符。
- 《网络安全法》第 27 条:不得从事非法侵入、干扰他人网络的活动。批量高频请求若造成站点负担,可能被认定为干扰。
实操层面的三条自律(我自己的规矩)
① 只查给我授权的人和我自己;
② 报告里不写「此人是 X」这种身份结论,只写「该 ID 在 Y 站存在,证据如下」;
③ 查完删除中间产物(txt/csv 里都是链接,等于一份现成的画像),只留结论。
同类横评:它是不是你该用的那个
四个常见替代品。没有最好,只有对不对得上你的场景。
| 工具 | 强在哪 | 弱在哪 | 什么时候选它 |
|---|---|---|---|
| sherlock | 站点最多(482)、装起来最省事、导出现成、社区最活跃 | 只做「存在性」,不做内容抽取;误报需人工排 | 默认选它,90% 场景够用 |
| maigret | 会顺手抓昵称、简介、头像,直接出 HTML 报告,命中率更高 | 站点少一些,跑得慢,依赖更重 | 要「一份能直接看的报告」,不想自己整理 |
| WhatsMyName | 纯网页版,浏览器里点两下就出结果,零安装 | 不能批量、不能导出、不能自动化 | 临时查一次,不想装任何东西 |
| social-analyzer | 带置信度打分与内容分析,能出「性格/职业」推测 | 小众、维护慢、结论偏玄 | 做人物画像,能接受结论带噪声 |
组合拳(我自己在用的)
sherlock 定范围 → 人工点开逐条核 → maigret 补内容 → 最后自己写结论。 sherlock 负责「去哪儿看」,不负责「看到了什么」。指望一个工具出结论,必然被误导。
我的实测记录:哪些跑得通,哪些跑不动
写这一节是为了不糊弄你。我在本机(中国大陆网络、无全局代理)实测了各平台的直连可达性,结果很现实。
| 目标 | 直连结果 | 说明 |
|---|---|---|
| api.github.com | 200 通 | 仓库元数据、版本号、站点表全部拿到了,本页所有数字都出自这里 |
| raw.githubusercontent.com | 通 | data.json 与 pyproject.toml 直接读,确认了 482 站与 v0.16.2 |
| github.com(网页) | 超时 | API 通、网页不通,这就是「按域名分别放行」的典型表现 |
| x.com / t.me / reddit / medium | 全超时 | 不加代理时,这些站点的探测一律变成 [?],不是「没有」,是「没问到」 |
| zhihu.com | 403 | 反爬拦截。需要 Cookie 或走浏览器 |
| weibo.com | 200 | 可达,但未登录状态下很多信息不可见 |
| jianshu.com | 404 | 可达且明确回答「没有这个人」—— 这是有价值的阴性结果 |
| blog.csdn.net | 521 | CDN 层拦截,属机房特征,非真实 404 |
所以:在国内跑 sherlock,第一件事是配代理
不配代理就跑全站,你会得到一份「看起来什么都没查到」的报告 —— 而那 380 个超时的站,恰恰是最该查的那批。别被「跑完了」骗了,跑完了不等于查到了。
顺手记下的三个坑(都是我这轮踩的)
- 站点表路径改过。老教程里的
sherlock/resources/data.json已经 404,现在是sherlock_project/resources/data.json。照着旧文章加自定义站点的人会找不到文件。 - README 也搬家了。根目录的 README.md 现在是 404,实际在
docs/pyproject/README.md。参数文档要从这里读。 - Docker 不挂载等于白跑。
--rm一加上,容器一退出,报告跟着蒸发。必须-v 宿主机目录:/out,再把--folderoutput /out指过去。
一页速查:截图存手机就够了
────────────────── 装 ────────────────── pipx install sherlock-project python3 -m pip install sherlock-project # 备选 docker run --rm -v "$PWD/out:/out" sherlock/sherlock --folderoutput /out NAME ────────────────── 验 ────────────────── sherlock --version sherlock blue --site GitHub --print-all # 应命中 1 个 ────────────────── 跑 ────────────────── sherlock NAME --print-found --timeout 15 sherlock NAME1 NAME2 NAME3 --folderoutput ./out --csv sherlock NAME --site GitHub --site Reddit --print-all sherlock NAME --xlsx --csv -o ./report sherlock NAME --proxy socks5://127.0.0.1:7890 --print-found sherlock NAME --tor --print-found # 慢 ────────────────── 读 ────────────────── [+] 存在 [-] 不存在 [?] 没问到(≠ 没有) ────────────────── 铁律 ────────────────── 1. ID 相同 ≠ 同一人,必须交叉验证 2. 只查自己、授权对象、公开身份的机构 3. 不写身份结论,只写证据链 4. 查完删除中间产物
下一步
工具会了,该看怎么用它做一次真实的人物调研了 —— 我把这套方法原样用在一个认识的人身上,出了一份完整的调研档案:《江天 / 江楠 / 楠哥 · 数字足迹调研档案》。里面能看到这套流程真正跑起来的全过程,包括同名实体怎么切、证据怎么分级、结论怎么写。