如何用 Sherlock 的 --json 参数试用新的站点清单,包括直接用上游 PR 编号指定
【免费下载链接】sherlockHunt down social media accounts by username across social networks项目地址: https://gitcode.com/GitHub_Trending/sh/sherlock
你手里有一份新的站点清单——可能是自己改过的data.json,也可能是上游一个还没合并的 PR 里修改的清单——想在不改动 Sherlock 默认清单的前提下,用它跑一次真实的用户名查询。Sherlock 的--json(简写-j)参数正是干这个的:sherlock --help中的说明是 "Load data from a JSON file or an online, valid, JSON file. Upstream PR numbers also accepted.",即它接受本地 JSON 文件、在线 JSON 地址,也接受上游 PR 编号。
本文基于 docs/README.md 中的帮助输出,以及 sherlock_project/sherlock.py、sherlock_project/sites.py 中--json的实际实现逻辑来写操作步骤。
前提:安装并确认 Sherlock 可用
docs/README.md 给出的安装方式:
pipx install sherlock-project # 或使用 docker: docker run -it --rm sherlock/sherlock # 或使用 dnf: dnf install sherlock-projectpip或uv可以替代pipx。文档特别提醒:ParrotOS 和 Ubuntu 24.04 上第三方维护的包已经损坏,这两个系统的用户应使用uv/pipx/pip或 Docker。
安装后确认版本与参数说明:
sherlock --version sherlock --help--version会显示版本信息与依赖;文档中展示的--help输出对应 Version 0.16.0。确认--json选项出现在帮助里即可开始。
需要了解的一点默认行为:不传--json也不传--local时,Sherlock 默认加载的是在线托管的 livedata.json(托管在 data.sherlockproject.xyz),而不是安装包里的那份——sherlock_project/sites.py 注释说明这样做的目的是让使用者拿到最新数据。传了--local才会强制使用程序自带的resources/data.json,并且此时--json不再生效(sherlock_project/sherlock.py 中--local分支优先)。
--json 支持哪几种清单来源
参数值的三种形态在 sherlock_project/sites.py 的说明和 sherlock_project/sherlock.py 的代码中都有明确定义:
- 绝对路径或相对路径的本地文件:例如
/path/to/my_list.json或my_list.json;相对路径以当前工作目录为基准;文件名必须以.json结尾。 - 在线地址:
http://或https://开头、指向一份有效 JSON 文件的 URL。 - 纯数字:被解释为上游 PR 编号(见下文专节)。
准备一份试用清单文件
如果要自己写清单文件,结构以仓库内置的 sherlock_project/resources/data.json 为准:顶层是一个对象,每个键是站点名,值是该站点的探测信息。sherlock_project/resources/data.schema.json 定义了每个站点条目的必填字段url、urlMain、errorType、username_claimed,其中errorType只能取message、response_url、status_code(字符串或数组),并且:
errorType含message时必须提供errorMsg;errorType含response_url时必须提供errorUrl;errorType含status_code时必须提供errorCode。
下面这份文件直接取自内置清单中1337x的真实条目,保存为my_list.json即可作为最小试用清单(url中的{}是用户名占位符,由 sherlock_project/sites.py 的文档说明要求):
{ "1337x": { "errorMsg": [ "<title>Error something went wrong.</title>", "<head><title>404 Not Found</title></head>" ], "errorType": "message", "regexCheck": "^[A-Za-z0-9]{4,12}$", "url": "https://www.1337x.to/user/{}/", "urlMain": "https://www.1337x.to/", "username_claimed": "FitGirl" } }如果清单里有isNSFW: true的站点,默认会被跳过,需要加--nsfw才纳入检查(--site显式指定的站点不受此默认移除影响)。
用本地清单跑一次查询
sherlock --json my_list.json user123命令里的user123换成你要查询的用户名。多个用户名直接并列在末尾(sherlock --json my_list.json user1 user2)。
这一步会依次经历:读取my_list.json→ 按上游排除列表(exclusions)过滤站点 → 逐站探测用户名。清单加载失败时,查询不会开始,程序直接报错退出,报错对照见文末表格。
用上游 PR 编号直接试用
不需要下载 PR 的清单文件,直接把 PR 编号作为参数值:
# 1234 替换为你要试用的上游 PR 编号(纯整数) sherlock --json 1234 user123处理逻辑在 sherlock_project/sherlock.py:参数值如果是纯数字,程序会通过上游仓库的 PR 接口读取该 PR 的信息,取这个 PR 头提交(head commit)的 SHA,再以该提交为准取sherlock_project/resources/data.json作为清单来源。也就是说,试用的是 PR 分支上那份data.json,未合并的 PR 同样可以这样试。
两种典型结果:
- PR 编号不存在:接口返回带
message字段的响应,程序打印ERROR: Pull request #1234 not found.(1234为你传入的编号)并退出; - 编号有效:程序静默切换清单来源,正常进入查询流程,与用文件路径的行为一致。
验证清单确实生效
看终端输出:默认会打印找到用户名的站点(
--print-found默认开启);加--print-all还会打印未找到用户名的那些站点,这样能直接核对新清单里的站点名是否真的参与了探测。看落盘文件:文档说明找到的账户会按用户名存成文本文件,例如查询
user123后生成user123.txt;单用户名还可以用--output指定输出文件名,多用户名用--folderoutput指定输出目录,两者不能同时使用(同时传会打印You can only use one of the output methods.并退出)。用
--site核对单个站点:--site SITE_NAME把分析限定在指定站点上,可重复多次指定。如果新清单里应该含某站点但不含,可以这样验证:sherlock --json my_list.json --site 1337x user123若
1337x不在清单中,程序打印Error: Desired sites not found: '1337x'.并退出;在清单中则只对这一个站点发起探测,适合快速确认某个新站点能否被加载和命中。
两个会影响"生效站点集合"的默认行为,试用时要记住:
- 程序默认会加载上游误报排除列表并移除其中的站点;若加载失败,打印
Warning: Could not load exclusions, continuing without them.并在无排除列表的情况下继续。 - 加
--ignore-exclusions可完全忽略排除列表,官方帮助同时提示"may return more false positives"。
另外--timeout控制单次请求等待秒数,默认 60 秒,清单站点较多或网络较慢时可按需调整。
出错时对照这些信息定位
以下报错文案均来自 sherlock_project/sites.py 和 sherlock_project/sherlock.py 的源码,出现时按表定位:
| 报错 | 触发条件 | | - | - | |ERROR: Pull request #N not found.| 传入的 PR 编号在上游仓库中不存在 | |Problem while attempting to access data file URL '...': ...| 在线清单地址请求失败(网络异常等) | |Bad response while accessing data file URL '...'.| 在线清单地址返回了非 200 响应 | |Problem while attempting to access data file '...'.| 本地清单文件不存在 | |Problem parsing json contents at '...': ...| 清单不是合法 JSON 或解析失败 | |Problem parsing json contents at '...': Missing attribute '...'| 某站点条目缺少必填属性(如url、urlMain、username_claimed、errorType) | |Encountered TypeError parsing json contents for target '...' at '...' Skipping target.| 单个站点条目结构异常,跳过该站点后继续,不算致命错误 |
清单本身加载正常、但某个新站点始终查不到或误报时,--dump-response会把该站点的 HTTP 响应转储到 stdout 供针对性排查,这是帮助文本中列出的调试选项。
最后说明边界:--json只替换清单来源,不改探测逻辑;NSFW 站点、排除列表、--timeout等其余参数行为与平时一致。清单加载失败时程序在查询前就退出,不会产生结果文件,这一点可用于快速判断"是我的清单写错了,还是站点真的没命中"。
【免费下载链接】sherlockHunt down social media accounts by username across social networks项目地址: https://gitcode.com/GitHub_Trending/sh/sherlock
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考