sherlock / dossier
№ 01 · GitHub Trending 2,373 ★ / day Python MIT PROFILE · v0.16.2 · 复核于 2026-11-11

sherlock
一个用户名,482 个站点

Hunt down social media accounts by username across social networks

它不猜、不爬、不撞库。它只做一件极笨也极狠的事:把你给的那个用户名,逐个塞进 482 个网站的地址栏,然后看谁应答。 十几秒后,一张「这个 ID 在哪些平台存在」的清单摆在桌上。这一页是它的完整履历,也是一份照着敲就能出报告的作业本 —— 从装到用、从参数到误报、从排障到法律边界,一页走完。

109,655★
GitHub 星标总数
482
收录站点(data.json 实测)
17
命令行参数
2018-12-24
立项日 · 已跑 7 年
SECTION 01

它是谁:一句话,三种用法

先把期待校准。它不是黑客工具,也不是找人神器;它是一台「ID 存在性批量查询机」。用对了省半天,用错了白忙。

它做什么
输入一个用户名,输出一份「该用户名在哪些平台注册过」的清单,附可直接点开的链接。
它不做什么
不抓取主页内容、不发私信、不试密码、不绕过登录墙。只判定存在与不存在。
谁在用
安全研究、品牌保护、记者核查、以及每一个想搞清自己网上留了多少痕的普通人。

三个真实场景,对上号再往下读

场景你做的那件事产出物
自我盘点把自己的三个常用 ID 一起丢进去,看哪年哪月在哪个站手滑注册过,哪些该注销。一份「我的数字资产清单」,含待清理项
品牌 / 商标保护查你的品牌名在 482 个平台有没有被人抢注,抢注的挑出来做记录。一份抢注线索表,可直接去投诉
账号同名溯源同一个 ID 在 A 站和 B 站是不是同一个人?看交集与自述是否互证。一份「疑似同一人」假设 + 待验证清单

读之前先记住这一句

sherlock 给出的每一条命中,都只是「这个 ID 在这个站存在」,不等于「这是同一个人」。中间那道坎要靠你自己交叉验证 —— 第 07 节专门讲这件事,那是整页里最值钱的部分。

SECTION 02

履历年表:七年,一个人的项目长成基础设施

全部来自仓库公开数据(GitHub API,2026-11-11 复核)。数字会动,结构不会。

2018-12-24
立项:一个 20 岁出头的斯里兰卡开发者写下第一版
作者 Siddharth Dushantha(@sdushantha,仓库内累计 882 次提交)。最初的动机非常朴素 —— 他懒得一个个网站手动试自己的用户名。
2019 — 2021
从脚本长成工具:并发、Tor、导出格式
引入 requests-futures 做并发探测,加 --tor / --unique-tor,加 CSV / XLSX / JSON 三种导出。站点表从几十个扩到三百多,社区开始按平台提交 PR。
2022 — 2024
维护团队接棒,站点表数据库化
@hoadlck(467 次提交)、@ppfeister(417 次提交)等人接手日常维护;站点定义从散落代码收进统一的 data.json,判定逻辑抽象成 engine + errorType 两层,从此加一个网站不用改 Python。
2025 — 2026
破十万星,成为 OSINT 领域的默认件
今天:109,655 ★ / 12,710 fork / 410 个未结 issue。2026-09-08 发布 v0.16.2(当前最新),十个月里仓库仍在日更(最近一次推送就是 2026-11-11)。
2026-11-09
单日 +2,373 星,冲上 GitHub Trending 榜首
就是从那天起,「人肉搜索的门槛没了」这句话开始被反复引用。技术没变,变的是它被更多人看见了。

档案卡 / 冷数据

仓库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(看页面关键词)两派
SECTION 03

它怎么工作:三步,没有任何魔法

看懂这一段,你才会知道结果为什么会误报,也才知道该怎么改。绝大多数人跳过这节,然后在第 07 节栽跟头。

拼 URL:拿模板套用户名

站点表里每个平台都写了一行模板,比如 https://github.com/{username}。它把你的用户名填进去,得到一个候选地址。

发请求:并发扫,不逐个等

482 个地址不是排队问的。它开一个线程池(requests-futures)同时发,默认超时 60s 可调(--timeout),遇到 429 会退避重试。

判真伪:两派判定法

回来之后怎么算「存在」?分两派,见下表。

errorType判定逻辑典型站点准不准
status_codeHTTP 200 → 存在;404 → 不存在;其他码按站点定义处理GitHub、Reddit、多数标准站最可靠
message页面里出现某段「查无此人」的固定文案(errorMsg)→ 不存在;否则算存在把 404 也回成 200 的站,如部分国内平台易误报
+ regexCheck先按正则校验用户名格式,不合规直接跳过,避免无效请求用户名规则严的站省时间

站点表里一条记录长这样(真实字段结构):

sherlock_project/resources/data.json复制
{
  "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 会拿这两个假名去跑,确认站点规则没坏。你也能这么用:拿「一个肯定存在的名字 + 一串肯定不存在的乱码」各跑一次,两个结果都符合预期,说明这个站的规则是准的;否则它的命中一律不可信。这是全网最简单有效的规则校准法。

SECTION 04

装:四条路,按你的机器挑一条

四条都验过。装完必须跑那条「三秒验证」,不然后面全是瞎猜。

路线 A | pipx(推荐,隔离最干净)

pipx 给每个 CLI 工具单独开虚拟环境,不污染你的主 Python。装完直接在任意目录敲 sherlock。

bash · 三行装完复制
# 1. 装 pipx(已装可跳过)
python3 -m pip install --user pipx
python3 -m pipx ensurepath

# 2. 装 sherlock
pipx install sherlock-project

# 3. 验证(必须看到版本号)
sherlock --version

路线 B | pip(最直接,一行)

bash复制
pip install sherlock-project
# 若提示 command not found,说明 Scripts 目录不在 PATH,改用模块方式跑:
python3 -m sherlock_project --version

路线 C | Docker(不想动本机环境)

bash复制
# 拉镜像
docker pull sherlock/sherlock

# 跑一次:把结果写回当前目录(-v 挂载是必须的,否则报告留在容器里随它一起消失)
docker run --rm -v "$PWD/sherlock-results:/out" sherlock/sherlock \
  --folderoutput /out yourname

路线 D | 源码(要改站点表就走这条)

bash复制
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 立刻绕过,不必折腾环境变量。

三秒验证:装对了没有

bash · 这一步别省复制
# 拿官方自检样本跑,理论上只有 1 个站会命中
sherlock --site GitHub blue

# 期望输出(大意):
# [*] Checking username blue on:
# [+] GitHub: https://github.com/blue
SECTION 05

参数全表: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 —— 先只查这两家(判定最准),确认值得深挖了再放开全站,省时间。

SECTION 06

七套配方:复制就能跑

从「就查一个人」到「批量出 Excel 报告」。每条都标注了耗时预期和适用场景,按需取。

配方 1 | 最小可用:查一个人

bash · 约 1–3 分钟复制
sherlock yourname --print-found --timeout 15

屏幕最后会给你一个 yourname.txt,里面是命中的全部链接。这是 90% 的人需要的全部。

配方 2 | 一次查五个 ID(自我盘点用这个)

bash复制
sherlock jiangtian wuchenge nange old_id1 old_id2 \
  --folderoutput ./osint-2026 --csv --print-found --timeout 15

五个名字,五个文件夹,五份 txt + csv,互不覆盖。自我盘点就照这个跑,把你能想起来的旧 ID 全塞进去。

配方 3 | 只查准的两个站(先探路,别一上来扫全站)

bash · 20 秒出结果复制
sherlock yourname --site GitHub --site Reddit --print-all

配方 4 | 出 Excel 交给不写代码的人

bash复制
sherlock yourname --xlsx --csv --print-found -o ./报告

得到 报告.txt / 报告.csv / 报告.xlsx 三件套。xlsx 里是标准三列,直接加筛选、冻结首行就能发。

配方 5 | 走代理(国内网络的救星)

bash复制
# 先确认代理端口活着(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)

bash · 慢,10 分钟起复制
# 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 | 校准某站的规则是否可信(复核前的必做动作)

bash · 两次对照复制
# 一正:肯定存在的名字(GitHub 官方叫 blue)
sherlock blue --site GitHub --print-all

# 一反:肯定不存在的乱码
sherlock zzq9x8v7u6t5s4r3q2p1 --site GitHub --print-all

# 一正一反都对,这个站的判定才可信;错一个,它的命中全部打问号
SECTION 07

结果怎么读:从「有账号」到「是本人」,中间隔着四次验证

这是全页最重要的一节。工具跑完 20 秒,剩下的判断要花 20 分钟 —— 而结论的可信度,全在这 20 分钟里。

先认识报告长什么样

sherlock yourname --print-found
[*] Checking username yourname on: [+] GitHub: https://github.com/yourname [+] Reddit: https://www.reddit.com/user/yourname [+] Telegram: https://t.me/yourname [+] Medium: https://medium.com/@yourname [?] Instagram: Timeout after 15.0 seconds [-] HackerNews: Not Found [*] Saved results to yourname.txt
符号含义该怎么处理
[+]命中:该用户名在此站存在记下来,进下一步验证。先别下结论
[-]未命中:不存在排除。若你确定本人有号,说明是判定规则坏了,跑配方 7
[?]超时 / 被限流 / 需要登录不是「没有」,是「没问到」。加代理或降超时重跑,别当结论

四次验证,一次比一次硬

第一验:头像 / 昵称 / 简介是否互指

同一个 ID 在三个站,如果三处都写着同一个邮箱、同一个站外链接、同一个头像哈希,可信度立刻上一档。只看 ID 相同,不算证据。

第二验:找「不可伪造的交叉引用」

某站简介里写了你的个人网站,你的网站上又挂着那个站的链接 —— 这叫闭环,几乎无法伪造。反之,两个站各自独立、内容毫无交集,就只是同名。

第三验:时间线是否自洽

注册时间、发帖节奏、语言习惯(简体 / 繁体 / 中英混写)、作息时区。一个声称 2015 年就在用的账号,如果平台 2018 才上线,直接出局。

第四验:内容指纹

口头禅、排版习惯、标点偏好(全角还是半角)、常用表情、错别字模式。这一条最玄但最准 —— 同一套公众号排版样式,比任何 ID 都更能证明「是这个人」。

误报的三大来源(照这张表排,八成误报当场消失)

来源 1 · 软 404
站点对不存在的用户也返回 200 + 「查无此人」页面,sherlock 看到 200 就判存在。这是最大误报源。
来源 2 · 通用落地页
任何路径都回 200(重定向到首页/登录页)。每一条都「命中」,看一眼就知道不对劲。
来源 3 · 撞名本身
ID 真的被别人注册了。这不是误报,是真实存在但不是你要找的人 —— 最危险,因为它看起来完全正常。

一句可直接抄进报告的话

「本清单仅证明该用户名在所列平台存在,不构成身份同一性结论。每条命中均经【交叉引用 / 时间线 / 内容指纹】三项之一以上验证,验证状态见备注列。」 —— 写上这句,你的报告立刻从「搜了一下」变成「做过核查」。

想更硬:把结果叠成一张表

sherlock 只给「有/没有」。要出判断,手工补三列,可信度就直接可视化了:

平台链接互指证据时间线自洽判定
GitHubgithub.com/xxx简介里挂了个人站,域名一致2019 起,早于博客上线同一人
Telegramt.me/xxx群里发言提到同一课程名2023 起,吻合高度疑似
Redditreddit.com/u/xxx无2014 起,早于其他痕迹同名待查
某论坛forum/xxx无,且语言风格不符不吻合排除
SECTION 08

排障十条:按顺序试,别乱装东西

这十条覆盖了绝大多数人的卡点。每条都给了判定信号 —— 对上号再动手。

症状真因解法
command not found: sherlockPython 的 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 报错 ModuleNotFoundpandas / 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 秒是速度与完整性的平衡点,再往下压就要在报告里注明「部分站点未完成探测」。

SECTION 09

红线与边界:能查 ≠ 该查

这工具之所以能被讨论,是因为它只碰公开信息。越过这条线,它就从「调研」变成「骚扰」,从民事变成刑事。

可以做的

  • 查自己的 ID,做数字资产盘点与清理
  • 查自己品牌 / 商标是否被抢注
  • 对公开身份的机构、公众人物做公开信息核查(记者、研究场景)
  • 企业做自身暴露面自查(员工用公司名注册了哪些公开账号)
  • 学术研究,且不指向可识别的个人

不能做的

  • 跟踪、骚扰、报复特定个人 —— 这是最常见也最严重的误用
  • 人肉未成年人、家庭住址、工作单位
  • 把结果公开挂人、发到群里「审判」
  • 用结果撞库、猜密码、社工 —— 直接触碰《刑法》285 条
  • 商业爬取后转卖个人信息 —— 违反《个人信息保护法》

三条法律坐标(够用版,不构成法律意见)

  • 《个人信息保护法》:可识别到特定自然人的信息都算个人信息。公开可得 ≠ 可随意收集、使用、传输。处理需有合法性基础(同意 / 履行合同 / 公共利益等)。
  • 《刑法》第 253 条之一:非法获取、出售或提供公民个人信息,情节严重即入刑。「我从公开网站拿的」不是免罪符。
  • 《网络安全法》第 27 条:不得从事非法侵入、干扰他人网络的活动。批量高频请求若造成站点负担,可能被认定为干扰。

实操层面的三条自律(我自己的规矩)

① 只查给我授权的人和我自己;
② 报告里不写「此人是 X」这种身份结论,只写「该 ID 在 Y 站存在,证据如下」;
③ 查完删除中间产物(txt/csv 里都是链接,等于一份现成的画像),只留结论。

SECTION 10

同类横评:它是不是你该用的那个

四个常见替代品。没有最好,只有对不对得上你的场景。

工具强在哪弱在哪什么时候选它
sherlock站点最多(482)、装起来最省事、导出现成、社区最活跃只做「存在性」,不做内容抽取;误报需人工排默认选它,90% 场景够用
maigret会顺手抓昵称、简介、头像,直接出 HTML 报告,命中率更高站点少一些,跑得慢,依赖更重要「一份能直接看的报告」,不想自己整理
WhatsMyName纯网页版,浏览器里点两下就出结果,零安装不能批量、不能导出、不能自动化临时查一次,不想装任何东西
social-analyzer带置信度打分与内容分析,能出「性格/职业」推测小众、维护慢、结论偏玄做人物画像,能接受结论带噪声

组合拳(我自己在用的)

sherlock 定范围 → 人工点开逐条核 → maigret 补内容 → 最后自己写结论。 sherlock 负责「去哪儿看」,不负责「看到了什么」。指望一个工具出结论,必然被误导。

SECTION 11

我的实测记录:哪些跑得通,哪些跑不动

写这一节是为了不糊弄你。我在本机(中国大陆网络、无全局代理)实测了各平台的直连可达性,结果很现实。

目标直连结果说明
api.github.com200 通仓库元数据、版本号、站点表全部拿到了,本页所有数字都出自这里
raw.githubusercontent.com通data.json 与 pyproject.toml 直接读,确认了 482 站与 v0.16.2
github.com(网页)超时API 通、网页不通,这就是「按域名分别放行」的典型表现
x.com / t.me / reddit / medium全超时不加代理时,这些站点的探测一律变成 [?],不是「没有」,是「没问到」
zhihu.com403反爬拦截。需要 Cookie 或走浏览器
weibo.com200可达,但未登录状态下很多信息不可见
jianshu.com404可达且明确回答「没有这个人」—— 这是有价值的阴性结果
blog.csdn.net521CDN 层拦截,属机房特征,非真实 404

所以:在国内跑 sherlock,第一件事是配代理

不配代理就跑全站,你会得到一份「看起来什么都没查到」的报告 —— 而那 380 个超时的站,恰恰是最该查的那批。别被「跑完了」骗了,跑完了不等于查到了。

顺手记下的三个坑(都是我这轮踩的)

  1. 站点表路径改过。老教程里的 sherlock/resources/data.json 已经 404,现在是 sherlock_project/resources/data.json。照着旧文章加自定义站点的人会找不到文件。
  2. README 也搬家了。根目录的 README.md 现在是 404,实际在 docs/pyproject/README.md。参数文档要从这里读。
  3. Docker 不挂载等于白跑。--rm 一加上,容器一退出,报告跟着蒸发。必须 -v 宿主机目录:/out,再把 --folderoutput /out 指过去。
SECTION 12

一页速查:截图存手机就够了

SHEET · sherlock cheat sheet复制
────────────────── 装 ──────────────────
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. 查完删除中间产物

下一步

工具会了,该看怎么用它做一次真实的人物调研了 —— 我把这套方法原样用在一个认识的人身上,出了一份完整的调研档案:《江天 / 江楠 / 楠哥 · 数字足迹调研档案》。里面能看到这套流程真正跑起来的全过程,包括同名实体怎么切、证据怎么分级、结论怎么写。