本文档详细解释了 Sherlock 的核心搜索功能。它涵盖了引擎如何处理用户名、构建对社交网站的请求以及确定账户是否存在。有关搜索引擎使用的站点数据配置信息,请参阅站点数据系统。
用户名搜索引擎是 Sherlock 的核心组件,负责在各种社交网络上执行实际的用户名侦察。它通过接收用户名输入,根据配置的站点模式进行检查,向站点发出异步 HTTP 请求,并解释响应以确定账户是否存在。
来源: sherlock_project/sherlock.py170-530
用户名搜索引擎由几个关键组件组成,它们协同工作以提供高效准确的用户名搜索。
一个自定义的会话类,扩展了 FuturesSession 以支持带响应时间跟踪的异步请求。这使得 Sherlock 能够同时查询多个站点,显著提高性能。
来源: sherlock_project/sherlock.py48-111
sherlock() 函数是搜索引擎的主要入口点。它接收用户名、站点配置和各种选项,然后协调在所有指定站点上的搜索过程。
来源: sherlock_project/sherlock.py170-530
在发出请求之前,Sherlock 会根据适用的站点特定正则表达式模式验证用户名。这可以防止向用户名格式无效的站点发出不必要的请求。
来源: sherlock_project/sherlock.py276-285
Sherlock 通过将站点配置中的占位符替换为实际用户名来构建要检查的 URL。
| URL 类型 | 目的 | 示例 |
|---|---|---|
url_main | 主站点 URL | https://twitter.com |
url_user | 包含用户名的个人资料 URL | https://twitter.com/{username} |
url_probe | 用于存在性检查的特殊 URL(可选) | https://api.twitter.com/users/lookup.json?screen_name={username} |
来源: sherlock_project/sherlock.py273 sherlock_project/sherlock.py289-315
搜索引擎根据站点要求支持不同的 HTTP 方法
来源: sherlock_project/sherlock.py294-327
用户名搜索引擎使用三种主要方法来确定用户名是否存在于某个站点上
来源: sherlock_project/sherlock.py428-479
| 检测方法 | 描述 | 工作原理 |
|---|---|---|
message | 检查响应文本中的错误消息 | 如果找到特定错误文本,则用户名可用 |
status_code | 检查 HTTP 状态码 | 如果状态码与错误代码匹配,则用户名可用 |
response_url | 检查重定向后的最终 URL | 如果状态码为 200-299,则用户名已被占用 |
来源: sherlock_project/sherlock.py428-479
引擎包含对 Web 应用程序防火墙 (WAF) 的检测功能,以帮助识别请求何时被阻止。这可以防止在站点应用安全措施时出现错误结果。
来源: sherlock_project/sherlock.py410-426
所有站点检查的结果将被汇总并以结构化格式返回
来源: sherlock_project/sherlock.py510-518
对于检查的每个站点,引擎都会创建一个包含以下信息的结果条目
| 字段 | 描述 |
|---|---|
url_main | 主站点 URL |
url_user | 包含用户名的个人资料 URL |
status | 表示用户名是否存在的 QueryResult 对象 |
http_status | 请求的 HTTP 状态码 |
response_text | 响应文本(如果可用) |
来源: sherlock_project/sherlock.py253-258 sherlock_project/sherlock.py520-528
用户名搜索引擎实现了多种技术来优化性能和准确性
引擎使用 FuturesSession 并发发送请求,这在检查大量站点时显著提高了性能。
来源: sherlock_project/sherlock.py247-250
引擎将并发工作器的数量限制为 20 个,以防止系统过载或导致站点出现速率限制问题。
来源: sherlock_project/sherlock.py241-250
请求具有可配置的超时时间,以防止站点响应缓慢时出现挂起。
来源: sherlock_project/sherlock.py347-357
搜索引擎支持通过用不同字符替换特殊占位符来检查用户名的变体。
来源: sherlock_project/sherlock.py153-167
搜索引擎支持通过 Tor 或自定义代理发送请求,以增强隐私或绕过限制。
来源: sherlock_project/sherlock.py214-239 sherlock_project/sherlock.py340-357
用户名搜索引擎依赖站点数据系统(站点数据系统)来提供每个站点的配置信息。这种关注点分离使得引擎可以专注于搜索逻辑,而站点特定的详细信息则独立维护。
来源: sherlock_project/sherlock.py256-368
用户名搜索引擎是一个复杂的组件,可以有效地在众多社交网络中搜索用户名。其主要优势包括:
引擎的设计使其可以通过简单地更新站点数据配置来轻松扩展到新站点,而无需更改核心搜索逻辑。