
scapyネットワークライブラリを使用してPythonで書かれたDHCP枯渇スクリプト
ホワイトハットDHCP堅牢化検証: プールを枯渇させ、隣接ホストのリースを乗っ取り、偽造ARPでホストをアドレスから追い出し、ネットワークがそれを阻止したかどうかを報告します。rootとPython 3.11+が必要です。
Debian / Kali: 最新の .deb をReleasesから取得してインストールしてください — dhcpig と dhcpig-web が PATH に配置され、venvは不要です:
curl -LO https://github.com/kamorin/DHCPig/releases/download/v2.7.2/dhcpig_2.7.2-1_all.deb
sudo apt install ./dhcpig_2.7.2-1_all.deb
sudo dhcpig-web --open
グローバルインストール (任意のLinux、Python 3.11+、venv不要):
git clone https://github.com/kamorin/DHCPig && cd DHCPig
sudo pip install --break-system-packages .
sudo dhcpig-web --open
rootとしてシステムPythonに直接インストールされるため、sudo dhcpig-web は .venv/bin/ のパス操作なしでコマンドを見つけられます。--break-system-packages は、pipがシステムパッケージに触れることを防ぐDebian/KaliのPEP 668ガードを上書きします。そのガードは apt 管理のパッケージを保護するために存在するものであり、このインストールが特殊だからではありません。.deb かvenvを使えばそもそも必要ありません。
ソースから (任意のLinux、Python 3.11+):
git clone https://github.com/kamorin/DHCPig && cd DHCPig
python3 -m venv .venv && .venv/bin/pip install -e .
sudo .venv/bin/dhcpig-web --open
表示された http://127.0.0.1:8787/?token=... URLを開いてください。3つの注意点:
.venv/bin/ パスを使います — sudo は PATH をリセットするため。?token= は必須です。 これがないと401が返り、空白ページになります。ssh -L 8787:127.0.0.1:8787 user@<vm-ip>。--open は外してください。Debian/Kaliでは、venvステップが失敗した場合、最初に sudo apt install -y python3-venv を実行してください。
sudo .venv/bin/dhcpig exhaust eth0 --report run.json
sudo .venv/bin/dhcpig release eth0 --scope 192.168.4.0/22 # DESTRUCTIVE
sudo .venv/bin/dhcpig active-scan eth0 --scope 192.168.4.0/22 # read-only
sudo .venv/bin/dhcpig release-previous eth0 # undo a previous run
dhcpig ifaces
-v0 は結果のみを出力します。-v3 はパケットレベルのデバッグを追加します。全フラグのリファレンス: man dhcpig(インストール前は packaging/dhcpig.1)。
DHCP Exhaustion (exhaust) — 破壊的
DHCP Release Active Clients (release) — 破壊的
Post Exhaustion / Reset (release-previous) — 復旧
--max-age で古いエントリを除外しますFind Neighbors (active-scan) — 読み取り専用
Passive scan (scan) — 読み取り専用、CLIのみ
すべてはイベントログに記録され、重大なものから順に表示されます: 検出結果、次にホストごとに1行、最後に OUTCOME の集計です。Verbosity 0(web)または -v0(CLI)でパケットトラフィックが非表示になります。JSONエクスポートが完全な記録であり、ログは要約です。
リースは実行後も保持され、枯渇状態を検証できます。解放するには:
sudo .venv/bin/dhcpig restore eth0 # same process still running
sudo .venv/bin/dhcpig release-previous eth0 # any time later, from the lease journal
ジャーナル($XDG_STATE_HOME/dhcpig/leases-<iface>.jsonl)には、取得したリースごとのMAC、IP、サーバー、タイムスタンプが記録されます — 診断データです。完了したら削除してください。
所有しているネットワーク、または明示的にテストを許可されたネットワークに対してのみ実行してください。release と exhaust は設計上、稼働中のクライアントを妨害します。--scope は任意で、デフォルトではセグメント全体になります。作者は誤用について責任を負いません。
設計ノートと内部構造: docs/DESIGN.md。コントリビューション: CONTRIBUTING.md。ライセンス: GPL v2以降。
| フラグ |
|---|
--dry-run | 偵察のみ: ARPスイープと制御トランザクションは実際に実行されますが、変異を起こすものは送信されません |
--scope CIDR | ターゲットを制限します(繰り返し指定可)。デフォルトはインターフェース自身のネットワーク |
--rate N | pps、デフォルト7 — exhaust では使用不可(自己ペースのため) |
--no-evict | ARP競合フェーズをスキップします |
--report FILE | 実行終了時にセッションレポートを FILE に書き込みます。形式は FILE の拡張子に従います(.json/.csv/.html、デフォルトはJSON) |
--client-mac MAC | exhaust のみ。ランダムなMACの代わりにこのMACを使用します(繰り返し指定可 — リストを順に使用) |
--request-option SPEC | exhaust/active-scan。送信するDHCPオプション55(パラメータ要求リスト)の内容。例: 12,14-19,23(デフォルト: 組み込みのmacOS順プロファイル) |
--no-spoof-eth-src | exhaust のみ。すべてのフレームのEthernetソースとして実際のNIC MACを使用します(Wi-Fi。APは、ソースMACが関連付けられたステーションと一致しないフレームをドロップします) |