3.4 万 Star 的 maigret,只靠一个用户名就能扒出一个人的全套画像
- 通过用户名在3000多个站点递归搜索并汇总成调查档案
- 递归搜索和用户名变体生成自动关联多个身份
- 支持代理、Tor、I2P绕过反爬及实验性Cloudflare绕过
- AI模式将搜索结果汇总成结构化调查总结
- 工具仅搜索公开信息,合法性依赖使用场景,数据库会失效
先说一句容易让人不舒服的话。
在现代互联网上,一个人到底有多匿名,很多时候不取决于他藏得多深,而取决于他有没有在两个以上的平台用了同一个用户名。只要这个条件成立,他的匿名性就开始瓦解。
soxoj/maigret 就是把这件事做到极致的工具。截止 2026 年 6 月 29 日,3.41 万 Star,2590 Fork,MIT 协议,Python 写的,主语言。给它一个用户名,它能从 3000 多个站点里翻出这个账号,再把能挖到的信息全部汇总成一份「dossier」,调查档案。
它在 OSINT 圈的地位,看一眼谁在用它就知道了。Social Links 的 API、Crimewall、UserSearch,这些商用 OSINT 平台的底层都架在 maigret 上。
你想想看,一个开源工具能成为商业产品的地基,这事本身就不简单。
它真正干的活,是「用户名 → 全网身份」
很多人会把 maigret 和另一个叫 sherlock 的工具搞混。两个都是查用户名的,但 maigret 不是简单「这个用户名在哪个站存在」,它要的是档案。
这个差距体现在一个关键依赖上,socid_extractor。这是同一个作者写的另一个库,专门干一件事,从各种社交网站的页面和 API 响应里,把账号主人的结构化信息抠出来。真名、位置、自我介绍、关注数粉丝数、头像链接,还有最重要的一类,到其他账号的链接。
也就是说,maigret 不是查完一个站就走了,它会一边查一边挖。挖出来的信息里如果带出新的用户名、新的 ID,它会用这些新线索继续去查别的站。这是个递归过程。
README 里列了它用到的 SOWEL 分类法(OSINT 技术分类标准)三条,说得很直白。在其它平台搜索账号、检查登录名复用、检查昵称复用。说白了就是,一旦你的名字在某处泄露了真身,这个真身就会被反向追回所有用同名的地方。
这条递归链,是 maigret 区别于普通「查用户名脚本」的核心。
一行命令背后,3000 多个站点的数据库
用法简单得有点过分。
pip install maigret
maigret YOUR_USERNAME
默认跑一次,它查的是流量排名前 500 的站点。加个 -a 全查,加个 --tags photo,dating 按标签筛,--tags us 只查美国站点。一个用户名不够,maigret user1 user2 user3 -a 三个一起全扫。
这套「按标签筛站点」的设计,背后是一个精心维护的 data.json 数据库。这 3000 多个站点不是写死在代码里的,每个站点都带标签,有图片类、约会类、分国家、分类型。维护者要靠社区 PR 持续更新,因为站点结构变了查询规则就失效。
这也是 maigret 最现实的痛点,站点规则会过期。README 的 Commercial Use 那节说得很坦诚,开源版数据库靠社区维护,会随着时间失效。真正商用的版本有一个 5000 多站点、每天更新的私有数据库,还有一个用户名查询 API,要走商业授权。
这里有个很诚实的工程现实。OSINT 工具的护城河,不在算法,在数据的新鲜度。开源版给你方法和基础数据,新鲜的要花钱。这种「开源打底,数据收费」的模式,在 OSINT 领域挺常见。
递归搜索,才是它的灵魂
光会查站不算本事,maigret 真正吓人的是递归。
几个关键 flag 值得单独讲。--parse URL,你丢给它任意一个 profile 页面 URL,它先用 socid_extractor 解析,从里面挖出所有能提取的 ID 和用户名,然后拿这些新线索启动一轮递归搜索。一个页面,能炸出一串身份。
--permute 更绝。你给它 john doe 两个词,它会自动生成一堆可能的用户名变体,johndoe、j.doe、doejohn 等等,然后全部搜一遍。人起用户名是有规律的,工具就是把这个规律工程化了。
跑完之后,报告形式丰富得让人意外。HTML、PDF、XMind 思维导图、CSV、TXT、NDJSON、Neo4j Cypher 脚本,还有一个交互式的 D3 关系图谱。PDF 报告是可选额外依赖,pip install 'maigret[pdf]',因为要额外的图形库。
这一堆导出格式,说明它定位是「调查工具」而不是「玩具脚本」。调查是要存档、要汇报、要做关系分析的,报告格式覆盖了这些真实场景。
它怎么对付反爬,是另一个看点
3000 个站点不可能都用一套规则调,每个站都有自己反爬手段。maigret 在这块做了不少工程。
它支持代理、Tor、I2P 三种路由。.onion 和 .i2p 的暗网站点能查,WAF 拦数据中心 IP 的站能绕。
# 任意 HTTP/SOCKS 代理
maigret user --proxy socks5://127.0.0.1:1080
# Tor
maigret user --tor-proxy socks5://127.0.0.1:9050
# I2P
maigret user --i2p-proxy http://127.0.0.1:4444
还有个实验性的 Cloudflare 绕过,靠本地的 FlareSolverr 实例去解 JS 挑战。README 特别标注了 Experimental,配置 schema 和行为可能随时变,不保证向后兼容。这种诚实的标注我喜欢,没把实验功能吹成生产级。
--self-check 这个 flag 是给数据库维护者用的,它会拿「已知有此用户名」和「已知无此用户名」的站点对,去实时验证数据库里的规则还灵不灵,灵的留下,失效的 --auto-disable 自动关掉。这是 OSINT 数据库维护的核心动作,没有它,数据库会越用越脏。
AI 分析,让原始数据变成结论
最新的版本加了个 --ai 模式,挺值得说说。
它把搜索结果汇总成一份内部 Markdown 报告,发给 OpenAI 兼容的 chat 接口,让模型产出一份简短的「调查总结」。可能的真实名、位置、职业、兴趣、语言、置信度、后续线索,按这个结构输出。
export OPENAI_API_KEY=sk-...
maigret user --ai
# 换模型
maigret user --ai --ai-model gpt-4o-mini
接口默认指向 OpenAI,但 openai_api_base_url 可以指到任何兼容端点,Azure、OpenRouter、本地服务都行。
这个设计的妙处在于分工。maigret 负责把分散、嘈杂、结构各异的原始信号收集齐,AI 负责把这些信号综合成一个连贯的人物画像。前者是体力活,需要工程和数据,后者是判断活,需要推理能力。两者结合,调查效率是指数级提升。
这也是 OSINT 工具的发展方向,从「给数据」走向「给结论」。
工具的底线和能力的边界
这类工具写文章,边界比功能更重要,不然后面有人闯祸。
第一,合法使用是底线。 README 开头的 Disclaimer 写得明明白白,仅供教育和合法用途,使用者必须遵守所在地的法律(GDPR、CCPA 等),作者对滥用不承担责任。这不是客套话。OSINT 工具的合法性高度依赖使用场景,记者调查、安全研究、寻人、尽职调查是合法的,跟踪骚扰、人肉搜索是违法的。工具是中性的,动机决定性质,这话我得说在前头。
第二,它只能找「已经公开」的信息。 maigret 不会黑进任何系统,不会破解密码,它查的都是公开页面。一个人如果信息暴露得厉害,那是他自己在公开网络上留下的痕迹太多,不是 maigret 厉害到能无中生有。它的能力上限,是目标的数字足迹暴露程度。
第三,开源数据库会失效。 前面说过,站点结构一变,规则就废。免费版给你方法和起手数据,但要长期稳定用,要么自己持续维护 data.json,要么上商业版。别指望 clone 下来一劳永逸。
第四,递归会放大误判。 用户名复用是大概率事件,但不是必然。两个人碰巧用了同一个冷门用户名,maigret 会把两人的画像混在一起。--ai 总结里带「置信度」字段,就是在承认这个不确定性。调查结论要人来核,别把工具输出当铁证。
一个让人脊背发凉的工程启示
写到最后,maigret 给我的冲击不在技术,而在它揭示的现实。
我们每个人在互联网上留下的,不是孤立的账号,是一张可以被算法反向缝合的关系网。你十年前在某个论坛随手注册的账号,和你今天的主力账号,只要共享了一个用户名、一个头像、一个自我介绍,它们就会被串起来。
maigret 只是把这件本来很麻烦的事,自动化了。它的存在本身,是一面镜子,照出我们数字卫生习惯的真实水平。
下次注册账号前,你想想看,这个用户名,你是不是在别处也用过。
评论互动