soxoj/maigret
主な特徴
- 3000以上のサイトをサポート
- 非同期処理による高速検索
- 個人情報の自動抽出
- 再帰的検索による関連アカウントの発見
- 複数形式のレポート生成(HTML、PDF、XMind、JSONなど)
- グラフィカルなWebインターフェース
- Tor/I2Pサポート
- タグベースのサイトフィルタリング
- ユーザー名のパーミュテーション生成
- 様々なIDタイプのサポート(username、steam_id、vk_idなど)
リポジトリ解析: soxoj/maigret
基本情報
- リポジトリ名: soxoj/maigret
- 主要言語: Python
- スター数: 16,171
- フォーク数: 1,114
- 最終更新: アクティブに開発中(0.5.0a1)
- ライセンス: MIT License
- トピックス: OSINT、ユーザー名検索、ソーシャルメディア調査、プロファイリング
概要
一言で言うと
Maigretは、ユーザー名だけで3000以上のサイトからアカウントを検索し、個人に関する包括的なドシエ(情報ファイル)を収集するOSINTツールです。
詳細説明
Maigretは、オープンソースインテリジェンス(OSINT)分野の強力なツールで、Sherlockプロジェクトのフォークとして開発されました。ユーザー名を入力するだけで、ソーシャルメディア、フォーラム、ゲーミングサイト、開発者プラットフォームなど、世界中の3000以上のウェブサイトから該当するアカウントを検索します。個人情報の抽出、リンクされたアカウントの追跡、視覚的なグラフ生成など、単なるユーザー名検索を超えた高度な機能を提供します。
主な特徴
- 3000以上のサイトをサポート
- 非同期処理による高速検索
- 個人情報の自動抽出
- 再帰的検索による関連アカウントの発見
- 複数形式のレポート生成(HTML、PDF、XMind、JSONなど)
- グラフィカルなWebインターフェース
- Tor/I2Pサポート
- タグベースのサイトフィルタリング
- ユーザー名のパーミュテーション生成
- 様々なIDタイプのサポート(username、steam_id、vk_idなど)
使用方法
インストール
前提条件
- Python 3.10以上(Python 3.11推奨)
- インターネット接続
- (オプション)Torプロキシ(Torサイト検索用)
インストール手順
# 方法1: pip経由(推奨)
pip3 install maigret
# 方法2: Docker
docker pull soxoj/maigret
# 方法3: Gitクローン
git clone https://github.com/soxoj/maigret.git
cd maigret
pip3 install -e .
# 方法4: Windows用スタンドアロンEXE
# GitHub Releasesからダウンロード
# 方法5: クラウド環境
# Google Cloud Shell、Replit、Google Colab、Binderで利用可能
基本的な使い方
Hello World相当の例
# ユーザー名をトップ500サイトで検索
maigret username
# Dockerを使用した場合
docker run -v "$(pwd)"/reports:/reports soxoj/maigret:latest username
実践的な使用例
# すべてのサイトで検索
maigret username -a
# HTMLレポートを生成
maigret username --html --pdf
# 特定のタグでフィルタリング(写真・デートサイト)
maigret username --tags photo,dating
# 国別フィルタリング(アメリカ、日本のサイト)
maigret username --tags us,jp
# 複数のユーザー名を一度に検索
maigret user1 user2 user3
# URLから情報を解析
maigret --parse https://steamcommunity.com/profiles/76561199113454789
高度な使い方
# グラフ付きWebインターフェースを起動
maigret --web 5000
# ブラウザで http://localhost:5000 にアクセス
# 再帰的検索を無効化
maigret username --no-recursion
# タイムアウトとリトライ回数を調整
maigret username --timeout 30 --retries 2
# XMindマインドマップを生成
maigret username --xmind
# Torプロキシを使用
maigret username --tor-proxy 127.0.0.1:9050
# 動作しないサイトをテストして無効化
maigret --self-check
# ユーザー名のパーミュテーションを生成して検索
maigret john --permute
# 特定のIDタイプで検索(Steam IDの例)
maigret --id-type steam_id 76561199113454789
ドキュメント・リソース
公式ドキュメント
- README.md: プロジェクト概要、インストール方法、使用例、デモ
- docs/source/: 詳細なドキュメント(Sphinx形式)
- quick-start.rst: クイックスタートガイド
- usage-examples.rst: 使用例集
- command-line-options.rst: CLIオプション詳細
- supported-identifier-types.rst: サポートされるIDタイプ
- tags.rst: タグシステムの説明
- 公式サイト: https://maigret.readthedocs.io
- Telegram Bot: https://t.me/osint_maigret_bot
サンプル・デモ
- example.ipynb: Jupyter Notebook形式のインタラクティブな使用例
- sites.md: サポートされるサイトの一覧
- レポートサンプル: static/ディレクトリ内
- report_alexaimephotography_html_screenshot.png: HTMLレポートのスクリーンショット
- report_alexaimephotography_xmind_screenshot.png: XMindマインドマップの例
- web_interface_screenshot.png: Webインターフェースのスクリーンショット
チュートリアル・ガイド
- GitHub READMEのデモ動画
- Read the Docsのクイックスタートガイド
- 使用例ドキュメント
- クラウド環境での実行方法(Colab、Binder)
技術的詳細
アーキテクチャ
全体構造
Maigretは非同期I/Oを活用した高速スキャンアーキテクチャを採用しています。aiohttpによる非同期HTTPリクエスト、4000サイトの情報を含むJSONデータベース、柔軟なレポート生成システム、Flaskを使用したWebインターフェースなど、モジュラーな設計になっています。
ディレクトリ構成
maigret/
├── maigret/ # メインパッケージ
│ ├── maigret.py # メインエントリポイントとオーケストレーション
│ ├── checking.py # サイトチェックロジック
│ ├── sites.py # サイトデータベース管理
│ ├── report.py # レポート生成
│ ├── activation.py # サイトアクティベーション機能
│ ├── permutator.py # ユーザー名パーミュテーション
│ ├── result.py # 結果データ構造
│ ├── settings.py # 設定管理
│ ├── utils.py # ユーティリティ関数
│ ├── resources/ # リソースファイル
│ │ ├── data.json # 4000サイトのデータベース
│ │ ├── settings.json # デフォルト設定
│ │ └── *.tpl # レポートテンプレート
│ └── web/ # Webインターフェース
│ ├── app.py # Flaskアプリケーション
│ └── templates/ # HTMLテンプレート
├── docs/ # Sphinxドキュメント
├── tests/ # pytestテスト
└── utils/ # 開発ユーティリティ
主要コンポーネント
-
Main Engine (maigret.py): 検索オーケストレーション
- 場所:
maigret/maigret.py - 依存: checking, sites, reportモジュール
- インターフェース:
search(),self_check(),main()
- 場所:
-
Checking Module: サイトチェックエンジン
- 場所:
maigret/checking.py - 依存: aiohttp, cloudscraper
- インターフェース:
check_username(),check_site()
- 場所:
-
Sites Database: サイト情報管理
- 場所:
maigret/sites.py - 依存: data.jsonファイル
- インターフェース:
MaigretDatabase,MaigretSite
- 場所:
-
Report Generator: レポート生成
- 場所:
maigret/report.py - 依存: xhtml2pdf, XMind, jinja2
- インターフェース:
generate_report_html(),generate_report_pdf()
- 場所:
技術スタック
コア技術
- 言語: Python 3.10+ (Python 3.11推奨)、非同期プログラミングを活用
- フレームワーク:
- Flask: Webインターフェース
- asyncio: 非同期処理
- 主要ライブラリ:
- aiohttp (3.10.10): 非同期HTTPクライアント
- requests (2.32.3): 同期HTTPクライアント
- cloudscraper (1.2.71): Cloudflare対策
- socid-extractor (0.0.27): ソーシャルID抽出
- xhtml2pdf (0.2.16): PDFレポート生成
- XMind (1.2.0): マインドマップ生成
- stem (1.8.2), torrequest (0.1.0): Torサポート
- pyvis (0.3.2), networkx (3.3): グラフ可視化
- Jinja2 (3.1.4): テンプレートエンジン
- colorama (0.4.6): カラーコンソール出力
開発・運用ツール
- ビルドツール:
- Poetry: 依存関係管理
- PyInstaller: Windows用スタンドアロンEXE作成
- setuptools: Pythonパッケージング
- テスト:
- pytest: テストフレームワーク
- flake8: コード品質チェック
- ユニットテストと統合テスト
- CI/CD:
- GitHub Actions: 自動テスト、リリース
- Docker Hub: イメージ自動ビルド
- デプロイ:
- PyPI: pipインストール
- Docker: コンテナデプロイ
- GitHub Releases: バイナリ配布
設計パターン・手法
- プラグインアーキテクチャ: サイトごとのチェックロジックをプラグイン化
- 非同期I/Oパターン: aiohttpによる並行リクエスト処理
- テンプレートパターン: Jinja2を使用したレポート生成
- データ駆動設計: JSONデータベースによるサイト情報管理
- モジュラー設計: 機能ごとに分離されたモジュール
データフロー・処理フロー
-
初期化:
- コマンドライン引数の解析
- 設定ファイルの読み込み
- サイトデータベースのロード
-
フィルタリング:
- タグによるサイト選別
- top_sites_countによる制限
- ユーザー指定サイトの適用
-
ユーザー名処理:
- パーミュテーション生成(オプション)
- IDタイプの変換
-
並行チェック:
- 非同期タスクの生成
- HTTPリクエストの発行
- レスポンスの解析
- アカウント存在判定
-
情報抽出:
- 個人情報のスクレイピング
- リンクの収集
- IDの抽出
-
再帰的検索:
- 関連ユーザー名の発見
- 追加検索の実行
-
レポート生成:
- 結果の集約
- フォーマット変換
- ファイル出力
API・インターフェース
公開API
CLIインターフェース
- 目的: ユーザー名検索、レポート生成、サイト管理
- 使用例:
# 基本的なオプション
maigret --help
maigret username [OPTIONS]
# 主要なオプション
--all-sites # すべてのサイトで検索
--tags TAG # タグでフィルタリング
--site SITE_NAME # 特定サイトのみ
--timeout SEC # タイムアウト設定
--id-type TYPE # IDタイプ指定
--parse URL # URL解析
--submit URL # 新サイト追加
Web API (Flask)
- 目的: インタラクティブな検索インターフェース
- 使用例:
# Webサーバー起動
maigret --web 5000
# エンドポイント
# GET / - メインページ
# POST /search - 検索実行
# GET /status - 検索ステータス
# GET /results - 結果取得
設定・カスタマイズ
設定ファイル (settings.json)
{
"timeout": 30, // リクエストタイムアウト(秒)
"max_connections": 100, // 最大同時接続数
"top_sites_count": 500, // デフォルト検索サイト数
"recursive_search": true, // 再帰的検索の有効化
"info_extracting": true, // 情報抽出の有効化
"proxy_url": null, // HTTPプロキシ
"tor_proxy_url": "socks5://127.0.0.1:9050", // Torプロキシ
"reports_path": "reports", // レポート保存先
"tags": { // タグシステム
"type": ["forum", "gaming", "photo", "video", "blog", "news"],
"countries": ["us", "ru", "jp", "cn", "kr"]
}
}
拡張・プラグイン開発
新サイトの追加:
--submit URLで新サイトを提案- data.jsonにサイト定義を追加
- テストユーザー名の設定
カスタムチェッカー:
checkType: "status_code" または "message"presenseStrs: アカウント存在を示す文字列absenceStrs: アカウント不在を示す文字列engine: プラットフォームタイプ
Activationメカニズム:
- 認証が必要なサイト向け
- cookies.txtファイルのサポート
- セッション管理
パフォーマンス・スケーラビリティ
パフォーマンス特性
- ベンチマーク結果:
- 500サイトで約2-3分
- 全サイト(3000+)で約10-15分
- 100同時接続での並行処理
- 最適化手法:
- 非同期I/Oによる並行処理
- キーワードフィルタリングでサイト数削減
- Alexaランキングによる優先度付け
- タイムアウトとリトライの調整
スケーラビリティ
- 同時接続数: max_connectionsパラメータで調整可能
- メモリ使用量: サイト数に比例して増加(通常200-500MB)
- ネットワーク帯域: 同時接続数に依存
- プロキシサポート: HTTP/SOCKSプロキシ経由での分散
制限事項
- 技術的な制限:
- Cloudflare保護サイトでの検出精度低下
- CAPTCHAやIPブロックによる制限
- JavaScriptレンダリングが必要なサイトは未対応
- 動的コンテンツの取得が困難
- 運用上の制限:
- レート制限による一時的なブロック
- サイトの仕様変更による検出失敗
- ネットワーク接続の安定性要求
- 大量検索時の倖理的配慮
評価・所感
技術的評価
強み
- 包括的なサイトカバレッジ: 4000サイトを超える圧倒的なデータベース
- 高度な機能: 単なるユーザー名検索を超えた情報抽出、再帰的検索
- 柔軟なレポート生成: 多様な出力形式と視覚的なグラフ表現
- 非同期処理: 高速な並行スキャン
- アクティブな開発: 定期的なサイトデータベースの更新
- 充実したフィルタリング: タグベースの柔軟な検索
改善の余地
- JavaScriptレンダリング対応: 動的なコンテンツへの対応
- 誤検知の削減: より高度なチェックロジック
- GUIの提供: コマンドラインに慣れないユーザー向け
- APIサーバー: RESTful APIの提供
向いている用途
- OSINT調査: 個人や組織のオンラインプレゼンス調査
- セキュリティ監査: 内部監査、ペネトレーションテストの事前調査
- ブランド保護: オンラインでのブランド侵害の監視
- デジタルフットプリント調査: 個人のオンライン活動の把握
- 採用候補者調査: バックグラウンドチェックの一環
- 法執行機関: 合法的な捜査活動
向いていない用途
- 大量の自動化スキャン: API制限に引っかかる可能性
- リアルタイム監視: 定期実行には別途工夫が必要
- 完全な匿名性: ネットワークレベルでの追跡が可能
- 法的制約のある地域: プライバシー保護法が厳しい地域での使用
総評
Maigretは、OSINT分野における最も包括的で強力なユーザー名検索ツールの一つです。Sherlockプロジェクトの優れた基盤を受け継ぎ、さらに発展させた本ツールは、豊富な機能と高いパフォーマンスを兼ね備えています。特に、再帰的検索や情報抽出機能は他の類似ツールと一線を画しています。ただし、利用に際しては倖理的・法的な配慮が必要であり、合法的かつ倖理的な目的での使用が求められます。