使用 Maigret 通过用户名查询并挖掘个人信息

朱尔斯-梅格雷(Jules Maigret)是一名虚构的法国警探,该人物由乔治-西梅农(Georges Simenon)创作。梅格雷擅长于通过调查及挖掘个体的社交活动以及关系网络来研究其性格与心理特征,是一名忠实的六度分隔理论实践者。

六度分隔理论认为世界上任何互不相识的两人,只需要很少的中间人就能够建立起联系。 哈佛大学心理学教授斯坦利·米尔格拉姆于1967年根据这个概念做过一次连锁信实验,尝试证明平均只需要6步就可以联系任何两个互不相识的人。

本文涉及的 Maigret 是个朱尔斯-梅格雷数字化身项目,致力于个人信息的大规模收集及挖掘。传统个人信息挖掘方法往往需要依靠多个已知变量来提升信息获取效率及全面性,而 Maigret 能够仅使用 OSINT 用户名便可通过检查大量网站上的帐户并从网页挖掘所有可用信息的方式来进行个人档案的收集。完全免费,并且不需要 API 密钥。Maigret 是一个易于使用且功能强大的 Sherlock 分支。

Maigret 是个强大的基于 Python 的个人信息挖掘开源项目,目前支持的网站已超过 3600 个(完整列表),涵盖全球包括美国、英国、法国、加拿大、德国、日本、韩国、中国在内的多数国家和地区。默认对 500 个热门站点按受欢迎程度降序进行搜索并支持检查 Tor 站点、I2P 站点和域(通过 DNS 解析)搜索。

一句话概括,您只需简单的提供一个想要查询的目标用户名(英文字母及数字、字符的组合,不支持中文),Maigret 便可为您在全球范围内对该用户名所属用户进行挖掘并形成个人档案。不过 Maigret 无法对用户进行甄别(当某用户名被多名个体使用时),需要用户根据返回数据自行鉴别及清理。也就是说,目标用户名越特殊越唯一效果越好。

1. 工作原理流程图

2. 主要特点

  • 个人资料页面解析、个人信息提取、其他个人资料链接等。
  • 通过新用户名和找到的其他 id 进行递归搜索
  • 按标签搜索(网站类别、国家/地区)
  • 审查和验证码检测
  • 请求重试

3. 功能列表

3.1 个人信息收集

Maigret 解析帐户网页并提取个人信息、指向其他配置文件的链接等。提取的信息显示为 CLI 输出中的附加结果以及 HTML 和 PDF 报告中的表格。此外,Maigret 使用从链接中找到的 id 和用户名来开始递归搜索。

默认启用,可以使用如下命令禁用。

--no extracting

3.2 递归搜索

Maigret 可以从帐户页面上的链接中提取一些常见用户ID和用户名(通常人们会放置指向他们其他帐户的链接)并立即开始新的搜索。所有收集到的信息都将显示在 CLI 输出和报告中。

默认启用,可以使用如下命令禁用。

--no-recursion

3.3 报告

Maigret 目前支持 HTML、PDF、TXT、XMind 思维导图和 JSON 报告。

HTML/PDF 报告包含:

  • 头像照片
  • 所有收集到的个人信息
  • 从所有找到的帐户的统计数据中得出的关于假定个人数据(全名、性别、位置)的附加信息

此外,在搜索阶段结束后,CLI 输出中还有一个简短的文本报告。

3.4 标签

Maigret 站点数据库非常大(并且会更大),运行搜索所有站点可能会产生开销。此外,在某个人的情况下,通常很难理解哪些网站对我们来说更有趣。

标签标记允许按兴趣(照片、消息、财务等)或按国家/地区选择网站子集。在报告中分组和显示的已找到帐户的标签。

请参阅 Maigret Wiki 页面中的 标签 部分完整描述。

3.5 审查和验证码检测

Maigret 可以检测常见错误,例如审查存根页面、CloudFlare 验证码页面等。如果您在会话中遇到更多 3% 的某种类型的错误,您会在 CLI 输出中收到一条警告消息,其中包含提高性能和避免问题的建议。

3.6 重试

Maigret 将对收到临时错误(连接失败、代理错误等)的请求进行重试,默认情况下重试一次,可以通过 option 进行更改。

--retries N

3.7 档案和镜像检查

Maigret 数据库不仅包含原始网站,还包含镜像、存档和聚合器。例如:

即使主站不可用(机器人屏蔽、验证码防护等),它也允许获取有关此人的其他信息并检查帐户是否存在。

3.8 简单的 API

Maigret 可以使用 Python 进行集成开发,比如实现一个基于 Maigret 支持用户个人信息查询的 Telegram 机器人。案例如下:

4. 支持的标识符类型

Maigret 不仅可以搜索普通用户名,还可以通过某些通用标识符进行搜索。有一个所有当前支持的标识符的列表。

  • gaia_id – Google 内部数字用户标识符,以前放置在 Google Plus 帐户 URL 中。
  • steam_id – Steam 内部数字用户标识符。
  • wikimapia_uidWikimapia.org 内部数字用户标识符。
  • uidme_uguiduID.me 内部数字用户标识符。
  • yandex_public_id – Yandex 网站内部字母用户标识符。另请参阅:YaSeeker
  • vk_idVK.com 内部数字用户标识符。
  • ok_idOK.ru 内部数字用户标识符。
  • yelp_userid – Yelp 内部用户标识符。

5. Maigret安装方法

Maigret 可以使用 pip、Docker 安装,也可以简单地从克隆的 repo 启动。

5.1 二进制安装包安装

适用于 Windows 系统,独立 EXE 二进制文件位于 GitHub 仓库发布部分

当前版本下载:maigret_standalone_win32_0.4.4.zip

5.2 包安装

需要 Python 3.7 或更高版本并使用 pip 安装,建议使用 Python 3.8+。

#从 pypi 安装
pip3 install maigret

#或克隆并手动安装
git clone https://github.com/soxoj/maigret && cd maigret
pip3 install .

#用法
maigret username

5.3 克隆仓库安装

git clone https://github.com/soxoj/maigret && cd maigret
pip3 install -r requirements.txt

#用法
./maigret.py username

5.4 Docker 安装

#官方 image
docker pull soxoj/maigret

#用法
docker run soxoj/maigret:latest username

#手工建立
docker build -t maigret .

5.5 使用云 Shell 和 Jupyter 笔记本运行 Maigret

无需安装,您还可以直接使用使用云 Shell 和 Jupyter 笔记本运行 Maigret:

6. 使用示例

#输出为html和pdf报告
maigret user --html --pdf

##在标有标签的网站上搜索 照片&数据
maigret user --tags photo,dating

##在所有可用网站上搜索三个用户名的信息
maigret user1 user2 user3 -a

7. 命令行选项

7.1 用户名

maigret username1 username2 ...

您可以指定多个用空格分隔的用户名。用户名不是强制性的,因为还有其他操作模式(见下文)。

7.2 解析账户页面和在线文档

maigret --parse URL

Maigret 将尝试提取有关文档/帐户所有者的信息(包括用户名和其他 ID),并将通过提取的用户名和 ID 进行搜索。例子

7.3 主要选项

选项也可以通过设置文件进行配置,请参阅 设置部分

--tags– 过滤网站以按标签搜索:网站类别和两个字母的国家代码。例如photo, dating, sport; jp, us,global。多个标签可以与一个站点相关联。注意:标签标记现在可能不稳定。

-n, --max-connections– 允许的并发连接数 (默认值:100)。

-a, --all-sites– 使用所有站点进行扫描(默认值:前 500 个)。

--top-sites– Alexa Top 排名的扫描站点计数 (默认值:前 500)。

--timeout– 等待站点响应的时间(以秒为单位) (默认值:30)。较长的超时将更有可能从慢速站点获得结果。另一方面,这可能会导致收集所有结果的时间很长。应在考虑 Internet 连接带宽的情况下选择正确的超时时间。

--cookies-jar-file– 带有 Netscape 格式的自定义 cookie 的文件(又名 cookies.txt)。您可以在浏览器上安装扩展程序以下载自己的 cookie(ChromeFirefox)。

--no-recursion– 禁用其他用户名的解析页面和他们的递归搜索。

--use-disabled-sites– 使用禁用的网站进行搜索(可能会导致许多误报)。

--id-type– 指定标识符类型(默认值:用户名)。支持的类型:gaia_id、vk_id、yandex_public_id、ok_id、wikimapia_uid。目前,您必须添加-a标志才能在具有自定义 ID 类型的站点上运行扫描,站点将被自动过滤。

--ignore-ids– 不要通过指定的用户名或其他 id 进行搜索。对于发现已知不相关用户名的重复扫描很有用。

--db– 从 JSON 文件或在线、有效的 JSON 文件加载 Maigret 数据库。

--retries RETRIES– 尝试重新启动暂时失败的请求的次数。

7.4 报告

-P, --pdf– 生成 PDF 报告(所有用户名的一般报告)。

-H, --html– 生成 HTML 报告文件(所有用户名的一般报告)。

-X, --xmind– 生成 XMind 8 思维导图(每个用户名一份报告)。

-C, --csv– 生成 CSV 报告(每个用户名一份报告)。

-T, --txt– 生成 TXT 报告(每个用户名一份报告)。

-J, --json– 生成特定类型的 JSON 报告:简单、ndjson(每个用户名一份报告)。例如--json ndjson

-fo, -默认情况下,--folderoutput结果将保存到此文件夹 。results如果不存在将被创建。

7.5 输出选项

-v, --verbose– 显示额外的信息和指标。 (日志级别=警告)

-vv, --info– 显示服务信息。(日志级别=信息)

-vvv, --debug, -d– 显示调试信息和站点响应。(日志级别=调试)

--print-not-found– 输出未找到用户名的站点。

--print-errors– 输出错误消息:连接、验证码、站点国家禁令等。

7.6 其他操作模式

--version– 显示版本信息和依赖关系。

--self-check– 对站点和数据库进行自检,默认情况下禁用当前搜索会话的非工作站点。它对于测试新的 Internet 连接很有用(这取决于提供者/托管在哪些站点上会有审查存根或验证码显示)。在检查 Maigret 询问是否要保存更新后,回答 y/Y 将重写本地数据库。

--submit URL– 对给定的帐户 URL 或站点主页 URL 进行自动分析,以确定站点引擎和检查帐户存在的方法。在检查 Maigret 询问是否要添加站点后,回答 y/Y 将重写本地数据库。

8. 使用示例

在 Maigret DB 的前 500 个站点上使用用户名 elonmusk 搜索帐户:

maigret elonmusk

在 Maigret DB 的所有站点上使用 elonmusk 用户名搜索帐户:

maigret elonmusk -a

开始搜索并生成 HTML 和 PDF 报告:

maigret elonmusk -a -HP

开始搜索仅在 Facebook 上使用用户名 elonmusk 所属帐户:

maigret elonmusk --site Facebook

通过 URL 从 Steam 页面中提取信息并使用找到的用户名进行搜索:

maigret --parse https://steamcommunity.com/profiles/76561199113454789

仅在美国和日本网站上搜索具有用户名 elonmusk 所属帐户:

maigret elonmusk --tags en,jp

仅在与软件开发相关的网站上搜索具有用户名 elonmusk 所属帐户:

maigret elonmusk --tags coding

仅在 uCoz 网站(独联体国家)上开始搜索具有用户名 elonmusk 所属帐户:

maigret elonmusk --tags ucoz

9. 从页面中提取信息

Maigret 可以通过 URL 解析 URL 和网页内容,以提取有关帐户所有者的信息和其他元信息。

您必须使用选项指定 URL --parse,它可以是指向帐户或在线文档的链接。支持的站点列表请参见此处

解析阶段结束后,Maigret 将通过找到的受支持标识符(用户名、ID 等)开始搜索阶段。

9.1 例子

$ 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: [email protected]
┣╸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

9.2 使用效果截图

生成报告效果截图:

生成的 pdf 报告:

生成的 html 报告: GitHub & BitBucket HTML Preview

生成的关系图:

10. 项目地址:

11. 使用方法文档

官方:Welcome to the Maigret docs! — Maigret 0.4.4 documentation

12. Maigret Telegram bot 在线体验

官方为了方便用户使用免去安装的烦恼,提供了 Maigret Telegram 机器人在线用户信息查询服务。拥有 Telegram 账号的朋友可直接使用。

启动机器人后,直接发送想要查询的用户名即可,查询处理时间大概需要 10 分钟,有进度条显示。完成后,直接生成报告。

最后,Maigret 如果再加入相关性分析以及分类算法就能够方便的对重名用户进行自动鉴别,提供更加可靠的结果。Maigret 项目同时也向我们传达了一个保护个人隐私简单易行的方法,那就是尽可能的采用更加常用的用户名,当然,就账户安全性来说,这是个减分项。