特性
以下是 Maigret 的特性列表。
Web 界面
你可以以 Web 界面的方式运行 Maigret —— 在同一个页面里查看结果图谱、并下载所有格式的报告。
使用步骤:
使用
--web参数运行 Maigret,并指定端口号。
maigret --web 5000
在浏览器中打开 http://127.0.0.1:5000,输入一个或多个用户名以发起搜索。
稍等片刻搜索完成后,即可查看结果图谱、列出全部已发现账号的表格,并下载所有格式的报告。
Telegram 机器人
社区维护的一个 Telegram 机器人让你无需在本地安装就能运行 Maigret。
在线实例:sites.google.com/view/maigret-bot-link(跳转链接 —— 托管实例可能会在不同服务商之间迁移)。
个人信息收集
Maigret 会解析账号网页并抽取 个人信息、指向其它主页的链接等内容。抽取结果会以附加信息的形式出现在 CLI 输出中,并在 HTML 和 PDF 报告中以表格呈现。此外,Maigret 还会用从链接中发现的 ID 和用户名,启动递归搜索。
默认启用,可通过 --no extracting 关闭。
$ python3 -m maigret soxoj --timeout 5
[-] Starting a search on top 500 sites from the Maigret database...
[!] You can run search by full list of sites with flag `-a`
[*] Checking username soxoj on:
...
[+] GitHub: https://github.com/soxoj
├─uid: 31013580
├─image: https://avatars.githubusercontent.com/u/31013580?v=4
├─created_at: 2017-08-14T17:03:07Z
├─location: Amsterdam, Netherlands
├─follower_count: 1304
├─following_count: 54
├─fullname: Soxoj
├─public_gists_count: 3
├─public_repos_count: 88
├─twitter_username: sox0j
├─bio: Head of OSINT Center of Excellence in @SocialLinks-IO
├─is_company: Social Links
└─blog_url: soxoj.com
...
递归搜索
Maigret 能在账号页面中扫描 常见标识符 和链接中出现的用户名。当用户在主页里贴出指向其它社交账号的链接时,Maigret 会自动识别并对这些账号发起新的搜索。在此过程中发现的全部信息,都会同时显示在命令行输出和生成的报告中。
默认启用,可通过 --no-recursion 关闭。
$ python3 -m maigret soxoj --timeout 5
[-] Starting a search on top 500 sites from the Maigret database...
[!] You can run search by full list of sites with flag `-a`
[*] Checking username soxoj on:
...
[+] GitHub: https://github.com/soxoj
├─uid: 31013580
├─image: https://avatars.githubusercontent.com/u/31013580?v=4
├─created_at: 2017-08-14T17:03:07Z
├─location: Amsterdam, Netherlands
├─follower_count: 1304
├─following_count: 54
├─fullname: Soxoj
├─public_gists_count: 3
├─public_repos_count: 88
├─twitter_username: sox0j <===== another username found here
├─bio: Head of OSINT Center of Excellence in @SocialLinks-IO
├─is_company: Social Links
└─blog_url: soxoj.com
...
Searching |████████████████████████████████████████| 500/500 [100%] in 9.1s (54.85/s)
[-] You can see detailed site check errors with a flag `--print-errors`
[*] Checking username sox0j on:
[+] Telegram: https://t.me/sox0j
├─fullname: @Sox0j
...
用户名变体生成
Maigret 可以生成用户名的各种变体组合。只需在命令行传入几个用户名并加上 --permute 参数即可。感谢 @balestek 提供的想法和实现。
$ python3 -m maigret --permute hope dream --timeout 5
[-] 12 permutations from hope dream to check...
├─ hopedream
├─ _hopedream
├─ hopedream_
├─ hope_dream
├─ hope-dream
├─ hope.dream
├─ dreamhope
├─ _dreamhope
├─ dreamhope_
├─ dream_hope
├─ dream-hope
└─ dream.hope
[-] Starting a search on top 500 sites from the Maigret database...
[!] You can run search by full list of sites with flag `-a`
[*] Checking username hopedream on:
...
报告
Maigret 目前支持 HTML、PDF、TXT、XMind 8 思维导图和 JSON 等格式的报告。
HTML / PDF 报告包含以下内容:
头像
已收集到的全部个人信息
基于所有已发现账号的统计,推测出的额外个人数据(真实姓名、性别、所在地)
此外,在搜索结束后,CLI 输出中也会附上一份简短的文本报告。
警告
XMind 8 思维导图与 XMind 2022 不兼容!
AI 分析
通过 --ai 参数,Maigret 可以基于原始搜索结果生成一份简短、易读的调查摘要。它会先构建一份内部 Markdown 报告,将其发送至一个 OpenAI 兼容的 chat completion 接口,并把模型的回复以流式方式直接输出到终端。
export OPENAI_API_KEY=sk-...
maigret username --ai
该摘要采用固定格式,包含最可能的真实姓名、所在地、职业、兴趣、语言、主要使用的网站、用户名变体、出现过的平台数量、活跃年份、置信度评级,以及一份简短的后续线索清单。--ai 启用期间,逐站点进度和简短文本报告都会被抑制,以让这份流式摘要成为主要输出。
接口地址、模型名和 API key 可通过 settings.json(对应字段 openai_api_key、openai_model、openai_api_base_url)或 OPENAI_API_KEY 环境变量进行配置。可使用任意 OpenAI 兼容接口(Azure OpenAI、OpenRouter、本地推理服务等)。详情参见 AI 分析(内置) 与 配置。
审查和 CAPTCHA 检测
Maigret 能够识别一些常见错误,例如审查占位页、CloudFlare 验证码页等等。如果在一次会话中某类错误超过了 3%,CLI 输出里就会打印一条警告,并附上用于改善表现、规避问题的建议。
重试
对于遇到临时性错误(连接失败、代理错误等)的请求,Maigret 会进行重试。
默认尝试一次,可通过 --retries N 参数调整。
数据库自检
Maigret 内置了一个自检模式(--self-check),它会针对数据库中每个站点,分别查询已知被占用和已知未被占用的用户名,并验证检测结果是否符合预期。
自检过程是容错的:如果某个站点的检查抛出意外异常(例如网络错误或解析失败),该错误会被捕获并记录为一个问题项,而其余站点会继续被检查,不会被中断。因此,即便使用 -a --self-check 检查上百个站点,该流程也总能顺利跑完。
配合 --self-check 使用 --auto-disable 可以把检查失败的站点自动禁用;不加该参数时,问题项只会被报告出来,而不会真正禁用。使用 --diagnose 则可以打印每个站点的详细诊断信息,包括检查类型、具体问题和修复建议。
# Report-only mode (no changes to the database)
maigret --self-check
# Automatically disable failing sites and save updates
maigret -a --self-check --auto-disable
# Show detailed diagnosis for each failing site
maigret -a --self-check --diagnose
归档站与镜像站检查
Maigret 数据库中不仅包含原始网站,还包含镜像、归档和聚合站点。例如:
Picuki,Instagram 镜像
(已不再可用)Reddit BigData search
(已不再可用)Twitter shadowban 检查器
通过这些站点,可以获取关于目标人物的额外信息;即便主站点不可用(机器人防护、CAPTCHA 等),也仍能验证账号是否存在。
Cloudflare webgate 绕过
警告
实验性特性。 Cloudflare webgate 正处于积极开发阶段。配置项、CLI 参数行为以及经由其路由的站点集合都可能发生变化,不保证向后兼容。你可能会遇到一些不完善之处(CF 限速、求解器偶尔失败等),欢迎反馈以便逐步打磨。
部分站点位于完整的 Cloudflare JavaScript 挑战或 CF 防火墙硬封锁之后 —— 它们在数据库中被打上 protection: ["cf_js_challenge"] 或 protection: ["cf_firewall"] 标记,并通常被禁用,因为 aiohttp 和 curl_cffi 都无法自行解出 JS 挑战。
Maigret 可以把这类检查转交给本地的 Chrome 类求解器。目前支持两种后端,通过 settings.json 中的 cloudflare_bypass.modules 配置(第一个能连通的模块生效,后续模块作为兜底链依次尝试):
FlareSolverr(推荐)。运行一个真实的 Chrome 实例,并暴露 JSON API。上游真实的 HTTP 状态码、响应头和最终 URL 都会被保留,因此
checkType: status_code和checkType: response_url在绕过模式下依然能正常工作。docker run -d -p 8191:8191 --name flaresolverr ghcr.io/flaresolverr/flaresolverr:latestCloudflareBypassForScraping(旧版兜底)。只返回渲染后的 HTML,因此上游真实状态码会丢失 ——
checkType: message仍然可用,但status_code类检查会失准(成功时会被视为 200)。
启用绕过有两种方式,一是命令行参数:
maigret --cloudflare-bypass <username>
或在 settings.json 中将 cloudflare_bypass.enabled 设为 true。Web 界面(python -m maigret.web.app)读取的是同一份配置 —— 表单中没有单独的开关,因此切换 enabled 就是浏览器场景下启用绕过的唯一方式。
该绕过只对 protection 字段与 cloudflare_bypass.trigger_protection(默认 ["cf_js_challenge", "cf_firewall", "webgate"])有交集的站点生效;其它站点仍走常规的 aiohttp / curl_cffi 路径。
如果所有配置的模块都不可达,受影响的站点会被标记为 UNKNOWN,并附上一条可操作的错误信息,指向首个模块的 URL —— 绝大多数情况下,只需把 FlareSolverr 容器跑起来就能解决。
FlareSolverr 的 session 复用是自动的:Maigret 会在每次运行时固定一个 session: <session_prefix>-<pid>,这样对同一域名的多次检查就会共享 cf_clearance cookie(后续对该主机的请求会快 5–10 倍)。
激活机制
激活机制用于向那些需要额外认证(cookie、JWT token、自定义请求头等)的站点发起请求。
其实现方式是通过一个自定义函数,完成以下三步:
向某个特定网站端点发起一个专门的 HTTP 请求
处理响应内容
在本地 Maigret 数据库中更新该站点对应的请求头/cookie
由于激活只在遇到特定错误后才会触发,因此要拿到使用新认证信息的有效响应,还需要再触发一次重试(或重新运行一次 Maigret)。
激活机制默认启用,目前无法关闭。
更多细节请参见开发文档中的 激活机制 一节。
从账号页面抽取信息
Maigret 可以根据给定 URL 解析网页地址及其内容,抽取账号所有者及其它元信息。
需要使用 --parse 选项指定 URL,可以是某个账号的链接,也可以是在线文档的链接。支持的站点列表请查看此处。
解析阶段结束后,Maigret 会根据从中找到的 受支持标识符(用户名、ID 等)进入搜索阶段。
$ maigret --parse https://docs.google.com/spreadsheets/d/1HtZKMLRXNsZ0HjtBmo0Gi03nUPiJIA4CC4jTYbCAnXw/edit\#gid\=0
Scanning webpage by URL https://docs.google.com/spreadsheets/d/1HtZKMLRXNsZ0HjtBmo0Gi03nUPiJIA4CC4jTYbCAnXw/edit#gid=0...
┣╸org_name: Gooten
┗╸mime_type: application/vnd.google-apps.ritz
Scanning webpage by URL https://clients6.google.com/drive/v2beta/files/1HtZKMLRXNsZ0HjtBmo0Gi03nUPiJIA4CC4jTYbCAnXw?fields=alternateLink%2CcopyRequiresWriterPermission%2CcreatedDate%2Cdescription%2CdriveId%2CfileSize%2CiconLink%2Cid%2Clabels(starred%2C%20trashed)%2ClastViewedByMeDate%2CmodifiedDate%2Cshared%2CteamDriveId%2CuserPermission(id%2Cname%2CemailAddress%2Cdomain%2Crole%2CadditionalRoles%2CphotoLink%2Ctype%2CwithLink)%2Cpermissions(id%2Cname%2CemailAddress%2Cdomain%2Crole%2CadditionalRoles%2CphotoLink%2Ctype%2CwithLink)%2Cparents(id)%2Ccapabilities(canMoveItemWithinDrive%2CcanMoveItemOutOfDrive%2CcanMoveItemOutOfTeamDrive%2CcanAddChildren%2CcanEdit%2CcanDownload%2CcanComment%2CcanMoveChildrenWithinDrive%2CcanRename%2CcanRemoveChildren%2CcanMoveItemIntoTeamDrive)%2Ckind&supportsTeamDrives=true&enforceSingleParent=true&key=AIzaSyC1eQ1xj69IdTMeii5r7brs3R90eck-m7k...
┣╸created_at: 2016-02-16T18:51:52.021Z
┣╸updated_at: 2019-10-23T17:15:47.157Z
┣╸gaia_id: 15696155517366416778
┣╸fullname: Nadia Burgess
┣╸email: nadia@gooten.com
┣╸image: https://lh3.googleusercontent.com/a-/AOh14GheZe1CyNa3NeJInWAl70qkip4oJ7qLsD8vDy6X=s64
┗╸email_username: nadia
$ maigret.py --parse https://steamcommunity.com/profiles/76561199113454789
Scanning webpage by URL https://steamcommunity.com/profiles/76561199113454789...
┣╸steam_id: 76561199113454789
┣╸nickname: Pok
┗╸username: Machine42
简单 API
借助 Python 包 maigret,可以很方便地把 Maigret 集成到自己的项目中。
示例:社区维护的 Telegram 机器人