目录

Maigret:用户名溯源 3000+ 站点的 OSINT 工具

Maigret:用户名溯源 3000+ 站点的 OSINT 工具

学习目标

通过本文,你将掌握以下核心能力:

  • 理解 Maigret 的项目定位、核心能力和设计目标
  • 掌握 Maigret 的三大核心机制:站点检测循环、递归扩展循环、站点数据库自动更新
  • 学会安装 Maigret 并使用 CLI 进行用户名检测
  • 掌握 Maigret 的 Python 嵌入用法,将 OSINT 能力集成到自己的项目中
  • 了解 Maigret 的适用场景与边界,知道什么时候该用、什么时候不该用

目录


项目概览

Maigret(发音接近"梅格瑞",命名来源于福尔摩斯小说中的侦探 Jules Maigret)是一款开源的 OSINT(Open Source Intelligence,公开来源情报)工具,核心能力是:只需给出一个用户名,在 3000+ 个网站上自动检测该用户名是否已注册,并尽可能提取账户相关的公开信息

该项目由 soxoj 开发维护,当前版本 0.6.0(2025-04-10),最近一次提交为 2026-04-29——五年间持续活跃,GitHub 累计收获 33,646 颗 Stars2,513 个 Forks,是用户名枚举(username enumeration)领域最流行的开源方案之一。

Maigret 的设计目标不是入侵系统,而是利用各平台"用户名已被占用"这一公开事实进行溯源。 项目明确声明仅用于教育和合法用途,使用者需自行遵守当地法律(GDPR、CCPA 等)。

核心能力一览

能力说明
站点覆盖支持 3,157 个站点(持续更新),默认扫描流量排名前 500 的站点,-a 参数可扫描全部
递归搜索发现用户名后,自动提取关联 ID,再以新 ID 继续搜索,形成网络扩展
信息提取集成 socid_extractor 库,从个人主页中提取邮箱、头像、Bio、关联账户链接等
多格式报告支持 HTML、PDF、XMind 8(图形化思维导图)、JSON、NDJSON、CSV、TXT
匿名访问支持 Tor、I2P 和任意 SOCKS5/HTTP 代理,可访问 .onion / .i2p 域名
Web UI内置 Web 界面,提供结果关系图谱和多种格式报告下载
Python 嵌入CLI 仅是异步函数的封装,可作为库直接引入 Python 项目
零 API Key所有检测基于 HTTP 请求,无需任何平台授权

工作原理:递归 + 站点自动更新

Maigret 的技术架构围绕两个核心循环展开,理解它们是掌握这款工具的关键。

1. 站点检测循环

每个站点的检测逻辑统一抽象为"探测器"(probe),核心流程如下:

  1. 根据目标用户名构造该站点的个人主页 URL(不同站点 URL 格式各异,Maigret 维护了一个 3,157 条记录的映射库)
  2. 发送 HTTP 请求,检查响应状态码和页面内容
  3. 判断"用户名已被占用"还是"该账户不存在"(部分站点返回 404,部分返回 200 但有特定提示文本)
  4. 若检测到账户存在,调用 socid_extractor 提取页面中的结构化信息
用户输入: taylor_swift_1989
  ↓
Maigret 构造 URL → https://www.instagram.com/taylor_swift_1989/
  ↓
发送 GET 请求(支持自定义 User-Agent / 代理 / Tor)
  ↓
分析响应 → 找到 Profile 页面特征
  ↓
socid_extractor 提取 → 用户 ID(数字)、Bio、头像 URL、关联账户链接等结构化信息

防屏蔽机制:Maigret 会自动处理部分站点的 Cloudflare 防护、验证码和请求频率限制。对于 taplink.cc 等使用 Cloudflare 的站点,最近的 PR(#2308)已切换为模拟浏览器 User-Agent 以绕过检测。

2. 递归扩展循环

这是 Maigret 与同类工具最显著的差异点。当某个站点的检测返回个人主页 URL 后,Maigret 会:

  1. 解析页面中所有外部链接和 ID 标识符
  2. 将这些新发现的标识符(用户名、邮箱后缀、数字 ID 等)作为新的搜索关键词
  3. 启动新一轮站点检测,从而发现目标在更多平台上的关联账户

这一机制使其能够从一个平台的"taylor_swift"账户出发,层层扩散至 Twitter、GitHub、YouTube 等多个平台,最终构建出目标人物的数字轮廓图谱

3. 站点数据库的自动更新

Maigret 每次运行时(距上次运行超过 24 小时)会自动从 GitHub 下载最新的站点数据库,该数据库包含每个站点的:

  • 站点名称、URL 模板、图标 URL
  • 认证状态(是否需要登录才可查看)
  • 标签:站点分类(如 social、photo、coding)和国家代码(如 us、cn、ru)
  • 流量排名(来自 Majestic Million)
  • 检测方式(status_code、message、redirect 等)

若离线运行,Maigret 会回退到内置的数据库,保证工具仍可使用。

安装与最小示例

环境要求

  • Python 3.10 或更高版本
  • 无需其他系统依赖(跨平台)

安装方式

# 从 PyPI 安装
pip install maigret

# 或者从源码克隆
git clone https://github.com/soxoj/maigret && cd maigret
pip install .

不安装任何软件?可以通过以下途径直接运行:

最小示例

# 检测单个用户名(默认扫描流量排名前 500 的站点)
maigret taylor_swift

# 扫描全部 3000+ 站点
maigret taylor_swift -a

# 仅在标记为 photo 和 dating 的站点中搜索
maigret taylor_swift --tags photo,dating

# 生成 HTML 报告
maigret taylor_swift --html

# 生成 PDF 报告
maigret taylor_swift --pdf

# 通过 Tor 代理发送请求
maigret taylor_swift --tor-proxy socks5://127.0.0.1:9050

Python 嵌入用法

Maigret 的 CLI 是围绕一个异步函数的薄封装,可以直接引入 Python 项目。官方导出的核心接口为:

import asyncio
import logging
from maigret import search
from maigret.sites import MaigretDatabase

async def search_username(username: str):
    logger = logging.getLogger("maigret")
    db = MaigretDatabase()
    site_dict = db.get_all_sites()
    results = await search(
        username,
        site_dict=site_dict,
        logger=logger,
        timeout=5,
    )
    # results 为 dict,键为站点名,值为包含 found/status/url/extract_data 等字段的 dict
    for site_name, result_data in results.items():
        if result_data.get("found"):
            print(f"[+] Found on {site_name}: {result_data.get('url')}")
            if result_data.get("extract_data"):
                print(f"    Data: {result_data.get('extract_data')}")

asyncio.run(search_username("taylor_swift"))

完整的异步调用模式、站点标签过滤和自定义通知器用法,请参考官方 Library Usage 文档

适用场景与边界

适合的场景

  • 安全审计:验证某员工是否在未授权平台注册了与公司相关的账户
  • 数字足迹调查:了解某人在网络上的整体存在情况
  • 社会工程学防御:了解攻击者可能通过公开信息构建的画像
  • 失踪人口/案件调查:在获得合法授权的情况下追踪目标网络身份
  • 红队行动:测试组织对外暴露的数字身份信息

边界与局限

  • Maigret 不突破任何认证系统:它只是检测"公开可见"的信息,而非破解账户。
  • 检测结果受限于站点的反爬策略:Cloudflare、验证码、高频限制等会导致部分站点漏检。
  • 误报管理是持续维护工作:README 提到"站点检查会随时间失效,需要主动维护",因此 Maigret 维护者长期处理误报(false positive)问题,2025-2026 年间已有多次批量禁用/修复误报站点的 PR。
  • 不适用于深度匿名化评估:它只能检测已知站点的账户,无法发现所有在线身份。

常见问题与故障排查

问题1:部分站点检测失败或误报

现象:运行结果显示某些站点"未找到",但你手动访问确认该用户名已注册。

原因:Maigret 的站点数据库依赖社区维护,部分站点的检测逻辑可能随时间失效(页面结构变化、API 变更等)。

解决方案

  1. 更新 Maigret 到最新版本:pip install --upgrade maigret
  2. 手动提交 Issue 或 PR 修复失效的站点检测逻辑:https://github.com/soxoj/maigret/issues
  3. 对于关键站点,可以自定义检测规则(参考官方文档的 Site Definition

问题2:Cloudflare 防护导致检测失败

现象:运行日志显示大量请求被 Cloudflare 拦截。

原因:部分站点使用 Cloudflare 的 Bot Management 功能,会拦截自动化请求。

解决方案

  1. Maigret 已内置部分 Cloudflare 绕过策略(如模拟浏览器 User-Agent)
  2. 使用 --tor-proxy 参数通过 Tor 网络发送请求
  3. 对于频繁访问的场景,建议设置请求延迟:maigret username --timeout 10

问题3:递归搜索导致请求量过大

现象:启用递归搜索后,请求数量激增,触发站点限流。

原因:递归搜索会自动发现新标识符并启动新一轮检测,可能形成指数级扩展。

解决方案

  1. 限制递归深度:maigret username --recursion-depth 2(默认无限制)
  2. 只扫描高流量站点:maigret username(默认只扫描前 500 个站点)
  3. 使用标签过滤:maigret username --tags social(只搜索社交类站点)

问题4:报告生成失败

现象:运行完成但无法生成 PDF/HTML 报告。

原因:缺少依赖库(如 WeasyPrint 用于 PDF 生成)。

解决方案

# 安装完整依赖
pip install maigret[full]

# 或者只安装 PDF 生成依赖
pip install weasyprint

自测题

题目1:Maigret 的核心能力

问题:Maigret 与其他用户名枚举工具(如 sherlock)的主要区别是什么?

参考答案

Maigret 的主要差异化特性:

  1. 递归搜索:发现用户名后自动提取关联 ID,再以新 ID 继续搜索
  2. 信息提取:集成 socid_extractor,从个人主页提取邮箱、头像、Bio 等结构化信息
  3. 站点数据库自动更新:每次运行时自动从 GitHub 下载最新的站点数据库
  4. 多格式报告:支持 HTML、PDF、XMind、JSON、CSV 等多种格式

Sherlock 等工具通常只做用户名存在性检测,不具备递归扩展和信息提取能力。

题目2:站点检测原理

问题:Maigret 如何判断一个用户名在某个站点上"已注册"?

参考答案

Maigret 的检测逻辑:

  1. 根据用户名构造个人主页 URL
  2. 发送 HTTP 请求,检查响应状态码和内容
  3. 判断依据因站点而异:
    • 部分站点返回 404(用户不存在)
    • 部分站点返回 200 但有特定提示文本(如"User not found")
    • 部分站点返回 403(需要登录才能查看)
  4. Maigret 为每个站点配置了特定的检测方式(status_code、message、redirect 等)

站点数据库中的每个站点都有对应的检测规则,这些规则由社区维护。

题目3:递归搜索的工作机制

问题:解释 Maigret 的递归扩展循环是如何工作的,并说明其价值与风险。

参考答案

工作机制

  1. 在某个站点检测到用户名存在后,Maigret 会解析该站点的个人主页
  2. 提取页面中的外部链接、邮箱、数字 ID 等新标识符
  3. 将这些新标识符作为搜索关键词,启动新一轮站点检测
  4. 重复此过程,形成扩散网络

价值

  • 从一个用户名出发,可以发现目标在多个平台上的关联账户
  • 构建目标的数字轮廓图谱

风险

  • 递归深度过大时,请求量指数级增长
  • 可能触发站点限流或封禁
  • 可能发现大量无关账户(同名用户)

题目4:Python 嵌入用法

问题:如何在自己的 Python 项目中集成 Maigret 的 OSINT 能力?

参考答案

Maigret 的 CLI 是围绕异步函数的薄封装,可以直接作为库引入:

import asyncio
from maigret import search
from maigret.sites import MaigretDatabase

async def search_username(username: str):
    db = MaigretDatabase()
    site_dict = db.get_all_sites()
    results = await search(username, site_dict=site_dict)
    # 处理 results

关键步骤:

  1. 导入 search 函数和 MaigretDatabase
  2. 创建异步函数(因为 search 是异步的)
  3. 初始化数据库并获取站点列表
  4. 调用 search 并处理结果

更多用法(站点标签过滤、自定义通知器等)参考官方文档。

题目5:合法性与边界

问题:使用 Maigret 进行 OSINT 调查时,需要注意哪些法律和道德边界?

参考答案

法律边界

  1. Maigret 只检测"公开可见"的信息,不突破任何认证系统
  2. 使用者需自行遵守当地法律(如 GDPR、CCPA 等)
  3. 未经授权对他人进行深度调查可能触犯法律
  4. 项目明确声明仅用于教育和合法用途

道德边界

  1. 不要将 Maigret 用于骚扰、跟踪或侵犯隐私
  2. 不要将提取的信息用于非法目的
  3. 在安全审计等合法场景中使用时,需获得明确授权

最佳实践

  • 只在自己拥有的用户名或获得书面授权的目标上使用
  • 不要将提取的个人信息泄露给第三方
  • 遵守负责任披露原则

进阶路径

阶段1:熟练使用 Maigret CLI

  • 掌握所有 CLI 参数(标签过滤、递归深度、输出格式等)
  • 学会使用 Docker 和 Telegram Bot 方式运行
  • 配置 Tor 代理实现匿名查询

阶段2:自定义站点检测规则

  • 学习 Maigret 的站点定义格式(JSON Schema)
  • 为自己常用的站点编写检测规则
  • 向 Maigret 社区提交 PR,贡献新站点

阶段3:集成到自动化工作流

  • 将 Maigret 集成到 Python 自动化脚本中
  • 结合其他 OSINT 工具(如 theHarvester、SpiderFoot)构建完整调查流程
  • 使用 Maigret 的 Python API 构建自定义报告生成器

阶段4:深入理解 OSINT 方法论

  • 学习 OSINT(公开来源情报)的理论框架
  • 了解数字足迹追踪的高级技术(如指纹识别、跨平台关联)
  • 探索 Maigret 的商业衍生项目(Social Links API、Crimewall)

总结

Maigret 是目前最完整的开源用户名 OSINT 工具之一,凭借 3000+ 站点覆盖、递归搜索、自动化信息提取和灵活的 Python 嵌入能力,为安全研究人员和分析师提供了高效的数字足迹构建方案。

项目五年持续活跃,维护质量高(依赖更新及时、误报处理迅速),且已有专业商业产品(Social Links API、Crimewall)基于 Maigret 构建。MIT 许可证允许免费商用,但若需要每日更新的站点数据库和专用 API 接口,可联系作者获取商业支持。

立即体验pip install maigret && maigret <你的目标用户名>

参考链接

  • GitHub 仓库:https://github.com/soxoj/maigret
  • 官方文档:https://maigret.readthedocs.io/
  • PyPI 主页:https://pypi.org/project/maigret/
  • Telegram Bot:https://t.me/maigret_search_bot
  • 站点列表:https://github.com/soxoj/maigret/blob/main/sites.md
  • 商业合作联系:maigret@soxoj.com