
aircrack-ng ワイヤレス監査スイートのローカルホスト型 GUI。
[!WARNING] 自分が所有しているか、テストする書面での許可を得ているネットワークでのみ使用してください。許可なくネットワークをスキャン、認証解除、またはトラフィックをキャプチャすることは、ほとんどの国で違法です。詳細は法的責任と責任ある使用を参照してください。
AirmonGUI は airmon-ng、airodump-ng、aireplay-ng、aircrack-ng を、自分のマシン上で動作する1つのWebアプリにまとめたものです。モニターモードの有効化、ネットワークのスキャン、WPAハンドシェイクのキャプチャ、そしてクラックまでを、フラグを覚える代わりにラベル付きのフォームをクリックして進められます。
各ツールを再実装しているわけではありません。バックエンドは実際のバイナリをシェル経由で呼び出し、その出力を解析するため、表示される内容はスイートが実際に行った処理そのものです。UI は 127.0.0.1 にバインドされ、API は決してマシンの外に出ません。
aircrack-ng スイートは優れていますが、ワークフローは4つの別々のコマンドと多くのフラグを頭に入れておく必要があります。カードをモニターモードにする、チャネルをホッピングしてターゲットを見つける、BSSID にロックする、正しいチャネルで deauth を送出する、4ウェイハンドシェイクを待つ、そしてキャプチャをワードリストに渡す。チャネルを間違えると deauth は無効になります。--bssid を忘れるとキャプチャにノイズが混ざります。
この一連の流れを、手順を案内する画面のセットとして、電波状況を表示し、各ステップ間の状態を正しく保持するものにしたかったのです。それがこれです。攻撃の実際の動作を学ぶため、ラボ作業、そして許可された評価の迅速化に役立ちます。
サイドバーを上から下へと進めます。以下が各画面です。
以下のスクリーンショットのネットワーク、BSSID、クライアントは実際のキャプチャではなく、合成されたデモデータです。
インターフェースを選択し、ドライバー、チップセット、PHY を確認して、モニターモードをオンにします。終わったらそのインターフェースだけ解除します。

airodump-ng ジョブを開始し、アクセスポイントとクライアントが見つかるたびに表示。テーブルをフィルタリングし、任意のネットワークを deauth またはハンドシェイクワークフローに直接送信できます。

シグナル分析はすべてのアクセスポイントをスコアリングし、シグナルが強く、セキュリティが弱く、アクティブなクライアントがいるものを上位に表示します。各チャネルの混雑状況と周辺ネットワークのセキュリティも表示されます。自分のデバイスはフラグが付くため、誤って自分自身をターゲットにすることはありません。

この画面では、airodump-ng をターゲットの BSSID とチャネルにロックし、自動deauthエンジンを実行してクライアントを切断して再接続させ、4ウェイハンドシェイクがキャプチャされると即座に緑色に変わります。

aircrack-ng にキャプチャとワードリストを指定します。実行中にログがストリーム表示され、パスフレーズがリストにあれば上部に表示されます。

チャネルロック付きのスタンドアロンdeauth、実行履歴、解析済みイベント出力:

キャプチャファイル管理:

セッションコマンド履歴:

Linux、root権限、モニターモード対応ワイヤレスアダプター、および $PATH に aircrack-ng スイートが必要です。詳細は要件を参照してください。
# 0. スイートをインストール(Debian、Ubuntu、Kali)
sudo apt update && sudo apt install aircrack-ng wireless-tools
# 1. クローン
git clone https://github.com/ELHart05/AirmonGUI.git
cd AirmonGUI
# 2. バックエンド(ターミナル1)
cd backend
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
sudo -E .venv/bin/uvicorn main:app --host 127.0.0.1 --port 8000
# 3. フロントエンド(ターミナル2)
cd frontend
npm install
npm run dev
http://localhost:5173 を開きます。UI は 127.0.0.1:8000 とのみ通信します。
初回接続時、UI は API トークンを要求します。バックエンドは起動時にコンソールに次のように出力します:
======================================================================
AirmonGUI API token (generated for this run):
Xy3k...long-random-string...
Paste it into the AirmonGUI web UI when prompted.
======================================================================
そのトークンをロック解除画面に貼り付けます。再起動後も同じトークンを使い続けたい場合は、backend/.env に AIRMON_GUI_AUTH_TOKEN を設定します(バックエンドは起動時にこのファイルを読み込みます)。ヘルスチェックを除くすべてのAPIルートにはこのトークンが必要です。これにより、操作しているローカルプロセスや偶々開いているウェブページが、背後でワイヤレスツールを操作することを防ぎます。バックエンドを 127.0.0.1 以外にバインドする場合は、トークンを明示的に設定する必要があります。設定しないと起動しません。
シングルユーザーマシンでプロンプトが煩わしい場合は、AIRMON_GUI_AUTH_ENABLED=false と設定して認証を完全にオフにできます。UI はロック解除画面をスキップします。認証をオフにした場合、バックエンドはループバック以外にはバインドしません。API_HOST を 127.0.0.1 以外に指定すると起動しません。
root が必要なのは、airmon-ng、airodump-ng、aireplay-ng が raw ソケットを使用するためです。.venv/bin/uvicorn を直接呼び出してください(単に uvicorn としない)。sudo は PATH をリセットするため、virtualenv を見失います。-E フラグは設定した AIRMON_GUI_* 変数を保持します。サーバーを root として実行したくない場合は、それらのバイナリに対してパスワードなしの sudo を設定し、backend/app/utils.py を調整してください。
cd frontend
npm run build # 静的ファイルを frontend/dist/ に出力
frontend/dist/ を任意の静的ファイルサーバーで配信し、/api/* と WebSocket /ws/* を Uvicorn プロセスにプロキシします。
| 層 | スタック |
|---|---|
| バックエンド | Python 3.11+, FastAPI, Uvicorn, Pydantic v2 |
| フロントエンド | Vue 3, Vite 5, Tailwind CSS 3, lucide-vue-next, xterm.js |
| ウェブサイト | React 18, TypeScript, Vite, Tailwind(オプションのランディングページ website/) |
AirmonGUI
├── backend/ FastAPI REST API と WebSocket、ツールごとに1つのルートモジュール
│ app/routes/ (interfaces, airodump, aireplay, aircrack, handshake, captures)
│ app/models.py (バリデート済み Pydantic I/O), app/state.py (インプロセスジョブレジストリ)
│ app/utils.py (サブプロセスとsudoロジック), app/config.py (環境設定)
│
├── frontend/ Vue 3 シングルページアプリ、コントロールコンソール
│ views/ (Overview, Monitor, Scan, Signal, Deauth, Handshake, Crack, Captures, Reports, Terminal, Logs)
│ composables/ (リアクティブなジョブおよび状態ロジック), api/ (fetchラッパー)
│
└── website/ スタンドアロンReactランディングサイト(オプション)
バックエンドは http://127.0.0.1:8000/api で REST API を提供し、/ws/terminal でターミナル用 WebSocket を提供します(APIトークンでゲート制御;AIRMON_GUI_TERMINAL_ENABLED=0 で無効化)。開発時は :5173 の Vite 開発サーバーが両方をバックエンドにプロキシします。
インタラクティブなスキーマは、バックエンド実行中に http://127.0.0.1:8000/docs(Swagger UI)、/redoc、/openapi.json で確認できます。
認証が有効な場合(デフォルト)、/api/health と /api/auth/status を除くすべてのエンドポイントで X-Auth-Token ヘッダーが必要です(トークンの入手方法はクイックスタートを参照)。Swagger UI の Authorize ボタンが自動的に送信します。AIRMON_GUI_AUTH_ENABLED=false ではトークンは不要になります(ループバックのみ)。
バックエンドは以下のデフォルトで動作するため、変更が必要な場合のみ設定してください。backend/.env(起動時に読み込み)に設定するか、Uvicorn 起動前にエクスポートします。エクスポートされた変数はファイルより優先されます。完全な一覧は backend/.env.example を参照。
「wlan0 をチャネル N にロックできませんでした」またはスキャンしてもネットワークが表示されない。 ほとんどの場合、インターフェースがまだマネージドモードです。モニターモードにすることでアダプターがキャプチャとチャネル切り替えを行えるようになります。まずモニタータブから有効にするか(airmon-ng start wlan0)、その後モニターインターフェース(多くの場合 wlan0mon、ドライバーによっては元の名前が残る)でスキャンしてください。スキャンはマネージドインターフェースをこのヒントとともに拒否します。シングルチャネルスキャンは、事前ロックが確認できない場合でも中断されなくなりました。airodump-ng 自身がチャネルを調整するためです。
初回の実行ではネットワークが表示されるのに、2回目では表示されない。 モニターインターフェースが残っているか、実行と実行の間に NetworkManager がアダプターを再取得してスタック状態になることがあります。スキャン前に airmon-ng check kill(チェックキルボタン)を実行し、同じインターフェースで別のスキャンを開始する前に前のスキャンを停止してください。
これらのいずれかへの協力を歓迎します。貢献を参照。
hashcat 連携アイデアがありますか?Issueを開いてください。機能リクエストや質問も歓迎します。
プルリクエストを歓迎します。小さく焦点を絞ったものほど良いです。
uvicorn)とフロントエンド(npm run dev)の両方が正常に起動することを確認してください。各フォルダには独自の README があります:backend、frontend、website。
このプロジェクトが役に立つなら、スターを付けていただけると他の人が見つけやすくなり、継続する価値があると判断できます。
AirmonGUI は、自分が所有しているか、評価のための書面による許可を得ているネットワークにおける、許可されたワイヤレステスト、研究、教育を目的としています。
許可なくネットワークやデバイスのトラフィックを傍受したり、認証解除することは、ほとんどの法域で違法です。デフォルトでは API と開発サーバーをループバックにバインドしているのはそのためです。共有ネットワークや公開ネットワークに公開しないでください。著者は誤用について一切責任を負いません。本ソフトウェアを使用することにより、自分が触れるすべてのネットワークとデバイスについて許可を得ていることを確認したものとみなします。
ネットワークを理解し防御するために使用し、他人のネットワークを攻撃するために使用しないでください。
MIT、LICENSE 参照。実際の作業を行う aircrack-ng プロジェクトを基に構築されています。
| 領域 | 説明 |
|---|
| モニターモード | airmon-ng を使用して、選択したインターフェースのモニターモードを有効化/無効化。バックグラウンドの NetworkManager などのサービスがモニターモードを妨害している場合、別のチェックキルアクションで airmon-ng check kill を実行します。 |
| ネットワークスキャン | airodump-ng キャプチャジョブを実行し、アクセスポイントとクライアントをライブテーブルに表示。名前、セキュリティ、バンドでフィルタリング可能。 |
| シグナル分析 | アクセスポイントを攻撃しやすさ(シグナル強度、弱いセキュリティ、アクティブなクライアント数)でランク付けし、チャネルの混雑状況と周辺のセキュリティ構成をグラフ表示。 |
| 認証解除 (Deauthentication) | aireplay-ng を使用して、ターゲットまたはブロードキャストの deauth を送信。事前にインターフェースをアクセスポイントのチャネルに設定し、フレームが確実に届くようにします。 |
| ハンドシェイクキャプチャ | 3ステップのワークフローで、airodump-ng をターゲットにロックし、自動deauthエンジンを実行し、WPA4ウェイハンドシェイクを自動検出。 |
| クラック | キャプチャとワードリストを aircrack-ng に渡し、ライブログをストリーム表示。パスフレーズがリストにあれば、見つかり次第表示。 |
| キャプチャ管理 | スイートが書き出す .cap、.csv、.pcap、.ivs、.log ファイルを参照、フィルタリング、一括選択、削除。 |
| 統合ターミナル | 同じウィンドウ内で生のコマンドラインを扱いたい場合のための、実際の PTY シェル(xterm.js)。 |
| コマンドログ | セッション中に実行されたすべてのコマンドと、stdout、stderr、ステータス、ワンクリックコピー。 |
| メソッド | エンドポイント | 説明 |
|---|
| GET | /api/health | サーバーヘルスチェック(トークン不要) |
| GET | /api/auth/status | 認証とターミナルが有効かどうか(トークン不要) |
| GET | /api/auth/verify | 提供されたトークンが有効か確認 |
| GET | /api/toolcheck | aircrack-ng ツールがインストールされているか確認 |
| GET | /api/interfaces | ワイヤレスインターフェース一覧(MAC、モニター状態) |
| POST | /api/monitor | モニターモード開始/停止 |
| POST | /api/checkkill | airmon-ng check kill を実行し、妨害するサービスを停止 |
| GET | /api/airodump/jobs | 実行中および既知のキャプチャジョブ一覧 |
| POST | /api/airodump/start | airodump-ng スキャンジョブ開始 |
| POST | /api/airodump/stop | ジョブID指定でスキャンジョブ停止 |
| GET | /api/airodump/results/{job_id} | 解析済みスキャン結果(ネットワークとクライアント) |
| POST | /api/aireplay/deauth/start | deauth ジョブ開始 |
| GET | /api/aireplay/deauth/jobs | deauth ジョブ一覧 |
| GET | /api/aireplay/deauth/{job_id}/status | deauth ジョブのポーリング |
| POST | /api/aireplay/deauth/{job_id}/stop | deauth ジョブ停止 |
| POST | /api/handshake/start | ターゲット指定ハンドシェイクキャプチャ開始 |
| GET | /api/handshake/jobs | ハンドシェイクキャプチャジョブ一覧 |
| GET | /api/handshake/{job_id}/status | ハンドシェイク検出のポーリング |
| POST | /api/handshake/{job_id}/stop | ハンドシェイクキャプチャ停止 |
| GET | /api/aircrack/jobs | クラックジョブ一覧 |
| GET | /api/aircrack/validate?path=<file> | キャプチャがハンドシェイクを含むか確認 |
| POST | /api/aircrack/crack | aircrack-ng ワードリストジョブ開始 |
| GET | /api/aircrack/{job_id}/status | クラック状態と最新ログ出力のポーリング |
| POST | /api/aircrack/{job_id}/stop | クラックジョブ停止 |
| GET | /api/captures | キャプチャファイル一覧 |
| GET | /api/captures/cap | クラック可能な .cap、.pcap、.ivs ファイル一覧 |
| DELETE | /api/captures/{filename} | キャプチャファイル削除 |
| WS | /ws/terminal | インタラクティブ PTY ターミナル(デフォルトでオン;トークンでゲート制御;AIRMON_GUI_TERMINAL_ENABLED=0 で無効化) |
| 変数 | デフォルト | 説明 |
|---|
AIRMON_GUI_CAPTURE_DIR | /var/lib/airmongui/captures | キャプチャファイルの書き込み先(0700 で作成;プライベートで所有されたディレクトリが必要) |
AIRMON_GUI_AUTH_ENABLED | true | false に設定するとトークン要件を解除(ループバックのみ) |
AIRMON_GUI_AUTH_TOKEN | (生成) | APIトークン。未設定の場合は起動時に生成・表示;ループバック以外にバインドする場合は必須 |
AIRMON_GUI_TERMINAL_ENABLED | 1 | トークンでゲート制御された /ws/terminal シェル;0 に設定するとルートを削除しタブを非表示 |
AIRMON_GUI_MAX_ACTIVE_JOBS | 8 | 同時実行ツールジョブの上限 |
CORS_ORIGINS | http://localhost:5173 | 許可するオリジン(カンマ区切り) |
API_HOST | 127.0.0.1 | Uvicorn がバインドするホスト |
API_PORT | 8000 | Uvicorn がリッスンするポート |
AIRMON_GUI_ENV_FILE | backend/.env | 読み込む環境ファイルのパス;空文字列で読み込みをスキップ |
export AIRMON_GUI_CAPTURE_DIR=/home/user/captures
sudo -E .venv/bin/uvicorn main:app --host 127.0.0.1 --port 8000
| 要件 | 備考 |
|---|
| Linux(カーネル4.x以上) | Kali Linux および Ubuntu 22.04 でテスト済み |
| モニターモード対応ワイヤレスアダプター | 例:Atheros AR9271 またはその他の一般的なペンテストチップセット |
| aircrack-ng スイート | airmon-ng、airodump-ng、aireplay-ng、aircrack-ng が $PATH 上にあること |
wireless-tools(iwconfig) | チャネル調整に使用 |
| root 権限 | aircrack-ng ツールに必要 |
| Python 3.11+ および Node.js 18+ | バックエンド・フロントエンドのツールチェーン |