Maigret实战:Python3步挖掘3000+网站用户名

发布时间:2026/7/1 1:08:01

Maigret实战:Python3步挖掘3000+网站用户名 为什么你需要 Maigret想象这个场景你在做一个安全渗透测试项目客户给了你一个可疑用户名想知道这人在哪些平台注册过账号。你打开浏览器一个一个网站去搜——GitHub、Twitter、Reddit、V2EX……搜到第30个网站时天已经黑了。又或者你发现公司某个内部系统被撞库攻击攻击者用同一个用户名注册了多个影子账号。你需要快速知道这个用户名在整个互联网上的足迹地图。手动搜索低效、遗漏多、不可复现。这正是 Maigret 要解决的问题。Maigret 是开源社区最活跃的 OSINT开源情报工具之一由安全研究员 [soxoj](https://github.com/soxoj) 维护截至2026年6月已支持3100 网站的用户名检测。一条命令下去几分钟内扫完几百个主流平台自动解析出个人资料、关联账号、用户ID等结构化数据还能一键导出 HTML/PDF/XMind 报告。**合法使用声明**Maigret 仅用于授权的安全测试、数字身份调查和学术研究。未经他人同意擅自搜索其个人信息可能违反隐私法规请务必遵守当地法律。环境准备Maigret 基于 Python 3.10安装极其简单# 强烈建议在虚拟环境中安装 python -m venv maigret-env source maigret-env/bin/activate # Linux/macOS # maigret-env\Scripts\activate # Windows pip install maigret安装完成后验证maigret --versionmaigret v0.4.6步骤1基础命令行搜索——一行扫遍500热门站点Maigret 默认扫描全球流量排名前500的网站兼顾速度和覆盖面。最基本的用法只需一个用户名maigret soxoj运行效果如下——终端实时显示每个站点的检测进度和结果[] Searching username soxoj: [] GitHub: https://github.com/soxoj [] Twitter: https://twitter.com/soxoj [] Reddit: https://www.reddit.com/user/soxoj [] Habr: https://habr.com/ru/users/soxoj [] Medium: https://medium.com/soxoj [-] Instagram: Not found [-] Facebook: Not found ... [?] Checking gitee.com: 403 Forbidden (may be rate-limited) ... [!] 100% finished. 512 targets checked in 47.3s [] Profiles found: 23 [-] Not found: 476 [?] Errors: 13关键参数速查| 参数 | 作用 ||------|------||--all-sites/-a| 扫描全部3100站点耗时长 ||--tags cn| 只看中国站点coding,social,photo等 ||--timeout 15| 单个站点超时时间调整 ||--retries 2| 失败重试次数 ||--no-recursive| 关闭递归搜索 |实际使用中建议先不加--all-sites拿到初步结果后再针对特定类别补搜# 先快速扫描热门站点 maigret suspicious_user # 发现这个用户活跃在技术社区追加扫描 coding 类全部站点 maigret suspicious_user --all-sites --tags coding --timeout 20 --retries 2步骤2生成可视化报告——HTML/PDF 一键导出命令行输出固然直观但要给客户交付成果一份精美的 HTML 或 PDF 报告必不可少。Maigret 内置了多种导出格式# 生成 HTML 交互报告默认输出到 reports/ 目录 maigret suspicious_user --html # 生成 PDF 报告 maigret suspicious_user --pdf # 生成 JSON 结构化数据方便后续程序处理 maigret suspicious_user --json # 生成 CSV 表格 maigret suspicious_user --csv # 一键生成全部格式 maigret suspicious_user --all-reports生成的 HTML 报告效果如下——每个发现的站点以卡片形式展示含用户名、URL、站点描述、匹配状态PDF 报告的特色功能自动提取每个平台的头像和简介按站点类别分组排列附检测统计摘要命中率、错误分布支持 XMind 思维导图导出方便做关系图谱分析# 生成 XMind 思维导图配合 --tags 筛选特定类别 maigret suspicious_user --xmind --all-sites步骤3Python 脚本批量搜索——自动化信息收集流水线如果你需要批量检测几十个用户名或者把 Maigret 集成到自己的自动化工具链里直接上 Python API。下面是一个完整可运行的批量搜索脚本 batch_maigret.py —— 批量用户名 OSINT 搜查脚本 用法: python batch_maigret.py 依赖: pip install maigret pandas import asyncio import logging import json from datetime import datetime from pathlib import Path from maigret import search as maigret_search from maigret.sites import MaigretDatabase, MaigretSite # 配置区 USERNAMES [alice_dev, bob_hacker, carl_the_coder] # 要搜索的用户名列表 TOP_N_SITES 300 # 扫描前 N 个热门站点 TIMEOUT 20 # 单站超时(秒) OUTPUT_DIR Path(./maigret_results) # async def search_one_username(username: str, db: MaigretDatabase, logger: logging.Logger): 搜索单个用户名返回命中结果字典 sites db.ranked_sites_dict(topTOP_N_SITES) print(f\n{*60}) print(f[*] 开始搜索: {username}) print(f{*60}) results await maigret_search( usernameusername, site_dictsites, loggerlogger, timeoutTIMEOUT, is_parsing_enabledTrue, # 开启资料解析提取关联账号 max_connections100, # 并发连接数 retries1, ) # 筛选命中结果 hits {} for site_name, result in results.items(): status result.get(status) if status and status.is_found(): hits[site_name] { url: result.get(url_user, ), ids_data: result.get(ids_data, {}), rank: result.get(rank, 0), } print(f [] {site_name}: {result.get(url_user, )}) print(f\n[✓] {username} 搜索完成: {len(hits)}/{TOP_N_SITES} 命中) return username, hits async def main(): logger logging.getLogger(maigret) logger.setLevel(logging.WARNING) # 减少日志噪音 # 加载站点数据库 print([*] 加载 Maigret 站点数据库...) # data.json 位于 maigret 包的 resources 目录下 # 若下面路径报错可从 GitHub Releases 下载 data.json 到当前目录 from importlib import resources as _resources try: with _resources.path(maigret.resources, data.json) as p: db MaigretDatabase().load_from_path(str(p)) except (ModuleNotFoundError, FileNotFoundError): db MaigretDatabase().load_from_path(data.json) print(f[*] 数据库加载完成共 {len(db.sites)} 个站点) # 批量搜索 OUTPUT_DIR.mkdir(parentsTrue, exist_okTrue) all_hits {} for username in USERNAMES: _, hits await search_one_username(username, db, logger) all_hits[username] hits # 汇总输出 timestamp datetime.now().strftime(%Y%m%d_%H%M%S) report_path OUTPUT_DIR / fbatch_report_{timestamp}.json with open(report_path, w, encodingutf-8) as f: json.dump(all_hits, f, indent2, ensure_asciiFalse) # 打印汇总表 print(f\n{*60}) print(f 批量搜索汇总) print(f{*60}) print(f{用户名:25} {命中数:6}) print(f{-*31}) for username, hits in all_hits.items(): print(f{username:25} {len(hits):6}) print(f\n[✓] 报告已保存: {report_path}) if __name__ __main__: asyncio.run(main())运行效果[*] 加载 Maigret 站点数据库... [*] 数据库加载完成共 3157 个站点 [*] 开始搜索: alice_dev [] GitHub: https://github.com/alice_dev [] Reddit: https://www.reddit.com/user/alice_dev [] StackOverflow: https://stackoverflow.com/users/123456/alice_dev [] Medium: https://medium.com/alice_dev [✓] alice_dev 搜索完成: 4/300 命中 [*] 开始搜索: bob_hacker [] GitLab: https://gitlab.com/bob_hacker [] LeetCode: https://leetcode.com/bob_hacker [✓] bob_hacker 搜索完成: 2/300 命中 批量搜索汇总 用户名 命中数 ------------------------------- alice_dev 4 bob_hacker 2 carl_the_coder 0 [✓] 报告已保存: maigret_results/batch_report_20260630_143021.json脚本中的is_parsing_enabledTrue是关键参数——它会调用内置的socid_extractor从找到的页面中自动提取用户的个人简介、关联的其他平台账号等结构化数据存放在ids_data字段里。Web 可视化界面附赠技巧如果你更喜欢图形化操作Maigret 还内置了一个 Web 界面maigret --web 5000浏览器打开http://localhost:5000你会看到一个交互式的搜索面板支持可视化输入框搜索结果实时渲染为卡片D3.js 力导向图展示用户名在各平台间的关联关系一键导出按钮避坑指南4 个实际踩过的坑坑1扫描中途大量 403/429 错误扫描几百个站点时某些平台会检测到异常流量并返回 403 或 429Too Many Requests。这不是 Maigret 的 bug而是目标网站的反爬策略。解决方案是降低并发并增加重试间隔maigret username --max-connections 30 --timeout 30 --retries 3如果你的 IP 已经被某些平台封了可以挂上代理maigret username --proxy socks5://127.0.0.1:1080坑2data.json 找不到如果你是git clone而不是pip install运行 Python API 时会遇到FileNotFoundError: data.json。两种解法# 方法一pip install推荐——data.json 自动随包安装 pip install maigret # 方法二手动下载 data.json 放到脚本同目录 # 从 https://github.com/soxoj/maigret/releases 下载最新 data.json坑3Python API 中 is_parsing_enabledTrue 拖慢速度开启资料解析is_parsing_enabledTrue后Maigret 会对每个命中页面发起额外的 HTTP 请求去抓取个人资料。如果你只需要知道是否注册而不关心注册了什么信息关掉它能让速度提升 40% 以上results await maigret_search( usernameusername, site_dictsites, loggerlogger, timeoutTIMEOUT, is_parsing_enabledFalse, # 关闭解析大幅提速 )坑4Windows 终端中文乱码Windows 下如果输出出现乱码在 PowerShell 中先执行[Console]::OutputEncoding [System.Text.Encoding]::UTF8 chcp 65001或在 Python 脚本开头加上import sys sys.stdout.reconfigure(encodingutf-8)总结| 场景 | 推荐命令 ||------|---------|| 快速排查可疑用户 |maigret username|| 全面深度搜索 |maigret username --all-sites --html --pdf|| 只看中国/技术社区 |maigret username --tags cn,coding --html|| 批量自动化 | 上面步骤3的 Python 脚本 || 团队协作/演示 |maigret --web 5000|Maigret 把用户名 → 互联网画像这个过程从手工劳作变成了自动化流水线。配合 Python API你完全可以把它的输出接入自己的 SIEM、威胁情报平台或者社工库查询管线。一个建议实际使用时务必设置合理的--timeout和并发数否则扫描 3000 站点可能触发目标平台的反爬机制。通常--timeout 20 默认并发 100 是一个比较安全的平衡点。试试用你自己的网名跑一遍可能会发现一些你已经忘掉但还在公网上的老账号——清理数字足迹也可以从这个工具开始。项目地址[https://github.com/soxoj/maigret](https://github.com/soxoj/maigret)官方文档[https://maigret.readthedocs.io](https://maigret.readthedocs.io)

相关新闻