本文档提供了 Sherlock 核心系统架构的技术概述,解释了主要组件及其协同工作方式。它描述了主要的数据流、请求处理管道和检测机制,使得跨众多社交网络的用户名侦查成为可能。
有关站点数据配置系统的详细信息,请参阅 站点数据系统。有关实际搜索引擎实现的详细信息,请参阅 用户名搜索引擎。
Sherlock 构建于一个简单而强大的架构之上,该架构能够同时高效地搜索多个平台上的用户名。其核心是一个主引擎,它使用可配置的站点数据来协调对各种社交网络的请求。
来源:sherlock_project/sherlock.py180-530 sherlock_project/sherlock.py566-974
该架构采用数据驱动的设计,站点配置存储在 JSON 文件中,将站点特定的检测逻辑与核心引擎分离。这种方法允许在不修改核心代码的情况下轻松扩展到新平台。
sherlock() 函数是驱动整个用户名搜索过程的主引擎。它接受一个用户名和站点数据,然后协调对社交网络的请求的创建、执行和分析。
来源:sherlock_project/sherlock.py170-530
主引擎处理:
Sherlock 使用 `FuturesSession` 的自定义扩展来高效处理异步 HTTP 请求。此类增加了响应时间测量功能,以跟踪每个社交网络响应所需的时间。
来源:sherlock_project/sherlock.py48-111
站点数据系统定义了 Sherlock 如何与每个社交网络进行交互。它被构建为一个包含数百个站点配置的 JSON 文件。
数据文件中的每个站点条目包括:
有关站点数据结构的更多详细信息,请参阅 站点数据系统。
来源:sherlock_project/resources/data.json1-50
Sherlock 使用通知系统将结果报告给用户。`QueryNotify` 基类提供了一个接口,不同的输出方法可以实现该接口。
来源:sherlock_project/sherlock.py844-846 sherlock_project/sherlock.py878-970
请求处理管道是 Sherlock 功能的核心,负责从用户名输入到结果确定的整个生命周期。
来源:sherlock_project/sherlock.py212-368 sherlock_project/sherlock.py371-528
在发出请求之前,Sherlock 使用正则表达式根据特定站点的模式验证用户名。这可以防止向用户名格式无效的站点发送不必要的请求。
来源:sherlock_project/sherlock.py276-285
Sherlock 根据每个站点的规范构建 HTTP 请求,支持各种方法(GET、HEAD、POST、PUT)以及所需的自定义标头或载荷。
每个请求的 URL 通过将用户名插入站点的 URL 模板来构造。
来源:sherlock_project/sherlock.py273 sherlock_project/sherlock.py294-308
为了高效地查询数百个站点,Sherlock 使用 `FuturesSession` 来并行执行请求。
来源:sherlock_project/sherlock.py248-250 sherlock_project/sherlock.py351-357
收到响应后,Sherlock 会对其进行分析,以确定用户名在每个站点上是否存在。
来源:sherlock_project/sherlock.py386-389
Sherlock 使用三种主要方法来确定用户名在某个站点上是否存在。
来源:sherlock_project/sherlock.py407-476
对于使用状态码检测的站点,Sherlock 将 HTTP 响应状态码与预期的错误代码进行比较。
来源:sherlock_project/sherlock.py453-465
对于使用消息检测的站点,Sherlock 会在响应文本中搜索特定的错误消息,这些消息指示账户不存在。
来源:sherlock_project/sherlock.py428-452
对于使用 URL 重定向检测的站点,Sherlock 会检查最终 URL 是否与请求的 URL 不同。
来源:sherlock_project/sherlock.py466-475
该系统通过命令行界面公开其功能,该界面提供了控制搜索和输出的各种选项。
来源:sherlock_project/sherlock.py566-730 sherlock_project/sherlock.py844-974
命令行界面支持:
Sherlock 实现了强大的错误处理机制,以应对各种网络问题和 Web 应用程序防火墙 (WAF) 阻止。
该系统还检测常见的 WAF 指纹,以识别站点何时阻止自动化访问。
来源:sherlock_project/sherlock.py114-140 sherlock_project/sherlock.py415-420
Sherlock 的核心架构旨在实现灵活性、效率和可扩展性。数据驱动的方法,将站点规范与核心逻辑分离,可以轻松添加新站点和检测方法。异步请求处理能够同时快速检查数百个站点,使其成为跨社交网络的用户名侦查的有效工具。
该架构的主要优势在于其适应不同社交平台所需检测方法的能力,以统一的方式处理从状态码到复杂错误消息和 URL 重定向的所有内容。