
Script di esaurimento DHCP scritto in Python utilizzando la libreria di rete scapy
Validazione whitehat dell'hardening DHCP: esaurisci un pool, dirotta i lease dei vicini, sfratta gli host dai loro indirizzi con ARP contraffatto e segnala se la rete ti ha fermato. Richiede root e Python 3.11+.
Debian / Kali: scarica l'ultimo .deb da Releases e installalo — mette dhcpig e dhcpig-web sul PATH, senza bisogno di 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
Installazione globale (qualsiasi Linux, Python 3.11+, senza venv):
git clone https://github.com/kamorin/DHCPig && cd DHCPig
sudo pip install --break-system-packages .
sudo dhcpig-web --open
Installa direttamente nel Python di sistema come root, quindi sudo dhcpig-web trova il comando senza dover maneggiare percorsi .venv/bin/. --break-system-packages disattiva la protezione PEP 668 di Debian/Kali che impedisce a pip di toccare i pacchetti di sistema — quella protezione esiste per salvaguardare i pacchetti gestiti da apt, non perché questa installazione sia anomala; il .deb o una venv evitano del tutto di averne bisogno.
Da sorgente (qualsiasi 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
Apri l'URL stampato http://127.0.0.1:8787/?token=.... Tre insidie:
.venv/bin/ — sudo azzera PATH.?token= è obbligatorio. Senza di esso ottieni 401 e una pagina vuota.ssh -L 8787:127.0.0.1:8787 user@<vm-ip>. Togli --open.Su Debian/Kali, esegui prima sudo apt install -y python3-venv se il passaggio della venv fallisce.
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 stampa solo i risultati; -v3 aggiunge il debug a livello di pacchetto. Riferimento completo delle flag: man dhcpig (o packaging/dhcpig.1 prima dell'installazione).
Esaurimento DHCP (exhaust) — distruttiva
Rilascio dei client attivi DHCP (release) — distruttiva
Post esaurimento / Reset (release-previous) — recupero
--max-age scarta le voci obsoleteTrova vicini (active-scan) — sola lettura
Scansione passiva (scan) — sola lettura, solo CLI
Tutto finisce nel log degli eventi, prima i più gravi: i finding, poi una riga per host, poi un riepilogo OUTCOME. La Verbosity 0 (web) o -v0 (CLI) nasconde il traffico dei pacchetti. L'export JSON è la registrazione completa: il log è un riepilogo.
I lease vengono mantenuti dopo un run così lo stato di esaurimento può essere verificato. Rilasciali:
sudo .venv/bin/dhcpig restore eth0 # same process still running
sudo .venv/bin/dhcpig release-previous eth0 # any time later, from the lease journal
Il journal ($XDG_STATE_HOME/dhcpig/leases-<iface>.jsonl) registra MAC, IP, server e timestamp per ogni lease preso — dati dell'engagement. Eliminalo quando hai finito.
Esegui questo strumento solo su reti di tua proprietà o per cui hai esplicita autorizzazione a testare. release ed exhaust interrompono di proposito i client attivi; --scope è opzionale e il default è l'intero segmento. Gli autori non sono responsabili per un uso improprio.
Note di progettazione e dettagli interni: docs/DESIGN.md. Contributi: CONTRIBUTING.md. Licenza: GPL v2 o successiva.
| Flag |
|---|
--dry-run | solo ricognizione: ARP sweep e transazioni di controllo eseguite realmente, nulla di mutante viene inviato |
--scope CIDR | limita i target (ripetibile); il default è la rete dell'interfaccia stessa |
--rate N | pps, default 7 — non su exhaust, che si auto-regola |
--no-evict | salta la fase di conflitto ARP |
--report FILE | scrive un report della sessione su FILE al termine dell'esecuzione; il formato segue l'estensione di FILE (.json/.csv/.html, default JSON) |
--client-mac MAC | solo exhaust; usa questo MAC invece di uno casuale (ripetibile — ruota nella lista) |
--request-option SPEC | exhaust/active-scan; contenuto dell'opzione DHCP 55 (parameter-request-list) da inviare, es. 12,14-19,23 (default: il profilo integrato in ordine macOS) |
--no-spoof-eth-src | solo exhaust; usa il MAC reale della NIC come sorgente Ethernet per ogni frame (Wi-Fi; gli AP scartano i frame il cui MAC sorgente non è la stazione associata) |