
DHCP-Erschöpfungsskript, geschrieben in Python unter Verwendung der Scapy-Netzwerkbibliothek
Validierung der DHCP-Härtung für Whitehats: einen Pool erschöpfen, Leases von Nachbarn kapern, Hosts mit gefälschtem ARP von ihren Adressen vertreiben und berichten, ob das Netzwerk dich gestoppt hat. Benötigt Root-Rechte und Python 3.11+.
Debian / Kali: das neueste .deb von
Releases herunterladen und installieren –
legt dhcpig und dhcpig-web auf den PATH, kein venv nötig:
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
Globale Installation (beliebiges Linux, Python 3.11+, kein venv):
git clone https://github.com/kamorin/DHCPig && cd DHCPig
sudo pip install --break-system-packages .
sudo dhcpig-web --open
Installiert direkt als Root in das System-Python, sodass sudo dhcpig-web den Befehl ohne
.venv/bin/-Pfad-Hantieren findet. --break-system-packages überschreibt Debian/Kalis PEP-668-Schutz,
der pip davon abhält, Systempakete anzufassen – dieser Schutz existiert, um apt-verwaltete Pakete zu schützen, nicht
weil diese Installation ungewöhnlich wäre; das .deb oder ein venv vermeiden ihn vollständig.
Aus dem Quellcode (beliebiges 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
Die ausgegebene URL http://127.0.0.1:8787/?token=... öffnen. Drei Stolperfallen:
.venv/bin/-
Pfad verwenden – sudo setzt PATH zurück.?token= ist Pflicht. Ohne sie gibt es 401er und eine leere Seite.ssh -L 8787:127.0.0.1:8787 user@<vm-ip>. --open weglassen.Auf Debian/Kali zuerst sudo apt install -y python3-venv ausführen, falls der venv-Schritt fehlschlägt.
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 gibt nur Ergebnisse aus; -v3 fügt Paket-Level-Debug hinzu. Vollständige Flag-Referenz: man dhcpig
(oder packaging/dhcpig.1 vor der Installation).
DHCP-Erschöpfung (exhaust) – destruktiv
DHCP-Release aktiver Clients (release) – destruktiv
Nach Erschöpfung / Zurücksetzen (release-previous) – Wiederherstellung
--max-age verwirft veraltete EinträgeNachbarn finden (active-scan) – schreibgeschützt
Passiver Scan (scan) – schreibgeschützt, nur CLI
Alles landet im Ereignisprotokoll, Schlimmstes zuerst: Findings, dann eine Zeile pro Host, dann eine
OUTCOME-Zusammenfassung. Verbosity 0 (Web) oder -v0 (CLI) versteckt den Paketverkehr. Der JSON-Export
ist der vollständige Datensatz – das Protokoll ist eine Zusammenfassung.
Leases werden nach einem Lauf behalten, damit der erschöpfte Zustand verifiziert werden kann. Sie freigeben:
sudo .venv/bin/dhcpig restore eth0 # same process still running
sudo .venv/bin/dhcpig release-previous eth0 # any time later, from the lease journal
Das Journal ($XDG_STATE_HOME/dhcpig/leases-<iface>.jsonl) zeichnet MAC, IP, Server und
Zeitstempel pro genommenem Lease auf – Engagement-Daten. Nach Abschluss löschen.
Nur gegen Netzwerke ausführen, die dir gehören oder für die du ausdrücklich autorisiert bist. release und
exhaust stören absichtlich Live-Clients; --scope ist optional und standardmäßig das gesamte
Segment. Die Autoren sind nicht für Missbrauch verantwortlich.
Designhinweise und Interna: docs/DESIGN.md. Mitwirken: CONTRIBUTING.md.
Lizenz: GPL v2 oder neuer.
| Flag |
|---|
--dry-run | nur Recon: ARP-Sweep und Kontrolltransaktionen laufen real, nichts Mutierendes wird gesendet |
--scope CIDR | begrenzt die Ziele (wiederholbar); standardmäßig das eigene Netz des Interfaces |
--rate N | pps, Standard 7 – nicht bei exhaust, das sich selbst taktet |
--no-evict | überspringt die ARP-Konfliktphase |
--report FILE | schreibt am Ende des Laufs einen Sitzungsbericht nach FILE; das Format folgt der Endung von FILE (.json/.csv/.html, Standard JSON) |
--client-mac MAC | nur exhaust; diese MAC anstelle einer zufälligen verwenden (wiederholbar – rotiert durch die Liste) |
--request-option SPEC | exhaust/active-scan; DHCP-Option-55 (Parameter-Request-Liste) Inhalt zum Senden, z. B. 12,14-19,23 (Standard: das eingebaute macOS-Reihenfolgen-Profil) |
--no-spoof-eth-src | nur exhaust; die echte NIC-MAC als Ethernet-Quelle für jedes Frame verwenden (Wi-Fi; APs verwerfen Frames, deren Quell-MAC nicht die assoziierte Station ist) |