Maigretは、ユーザー名1つを手がかりに3,000以上のサイトを横断調査し、アカウントの有無や公開情報をまとめてレポート化するOSINTツールです。APIキー不要で動作し、CLI・ライブラリ・Webインターフェースの3通りで使えます。soxoj/sherlock系譜のツールで、探偵小説の主人公メグレ警部にちなんだ名前です。
maigret/resources/data.jsonにサイトごとのチェックルール(URL構造、存在判定パターンなど)が定義されており、maigret/sites.pyのMaigretDatabaseがこれを読み込みます。checking.pyが各サイトへ非同期リクエストを送り、executors.pyが並列実行を管理します。見つかったプロフィールページからmaigret/errors.pyやerror_detection.pyでブロック・CAPTCHAを判別しつつ、socid_extractorで名前・リンクなど付随情報を抽出します。抽出した別ユーザー名やIDを使い再帰的に追加検索する仕組みもあります。結果はreport.pyでHTML・PDF・xmindなど複数形式にまとめられ、--aiオプション使用時はai.pyがOpenAI互換APIへ結果を渡して短い調査サマリーを生成します。db_updater.pyがGitHub上の最新サイトDBを24時間ごとに取得し、オフライン時は同梱のdata.jsonにフォールバックします。maigret/web/app.pyのFlaskアプリはSSE(Server-Sent Events)でチェック進捗をブラウザにストリーミングし、live.htmlなどのテンプレートで結果をグラフ表示します。
- STEP 01
pip install maigretを実行すると依存パッケージ一式がインストールされ、続けてmaigret USERNAMEでコマンドが使えるようになります。
- STEP 02
実行直後にサイトDBの自動更新チェックが走り、GitHubから最新のdata.jsonを取得しようとする通信が発生します(オフラインなら同梱データにフォールバックします)。
- STEP 03
デフォルトではアクセス数上位500サイトへ順次アクセスするため、ネットワーク環境によっては数分単位の待ち時間が発生し、進捗バーが逐次更新されます。
- STEP 04
見つかったアカウントごとにコンソールへURLと簡単な抽出情報が表示され、終了後にreport_USERNAME.htmlなどのレポートファイルがカレントディレクトリに生成されます。
- STEP 05
-aオプションを付けると全3,000サイトを対象にするため実行時間が大幅に伸び、--tagsで国やカテゴリを絞ると対象サイト数を減らせます。
- STEP 06
maigret --webでFlaskのWeb UIを起動すると、ブラウザ上でライブ進捗のグラフ表示や結果のダウンロードが可能になります。
実行後には、対象ユーザー名が存在した各サイトのURL一覧と、プロフィールページから抽出できた氏名・関連リンク・その他IDなどをまとめたレポートファイル(HTML・PDF・xmindなど選択形式)が手元に残ります。--aiを使えば、それらの生データをもとにした短い調査サマリー文章も追加で得られます。
サイトDBは実行のたびにGitHubへ問い合わせて自動更新される仕様のため、オフライン環境や社内プロキシ配下では通信が制限され同梱データのみで動作する点に注意が必要です。
3,000件のサイトを全て調査する-aオプションは実行時間が長くなり、対象サイト側からブロックやCAPTCHAを受けるケースもerror_detection.pyで検出はされるものの完全には回避できません。
README冒頭やドキュメントに明記の通り、教育・合法目的専用のツールであり、収集した個人情報の扱いはGDPRなど各法域の規制に利用者自身が従う責任があります。
OSINT調査や penetration test の初動でユーザー名から足がかりを広げたい人に向いたツールです。3,000件超のサイト定義ファイル(data.json)と非同期実行基盤(checking.py・executors.py)、レポート生成(report.py)、Web UI(app.py)まで実コードが揃っており、READMEの主張(APIキー不要・自動DB更新・再帰検索・AI要約)は各ソースファイルの役割と整合しています。テストディレクトリにもtest_checking.pyやtest_web.pyなど機能単位のテストが存在するため、記載機能の実在性は高いと判断できます。ただし実行時間・通信量・法的責任は利用者側の判断に委ねられる部分であり、その点は事前に理解した上で導入するのがよいでしょう。