
Script de exaustão DHCP escrito em Python usando a biblioteca de rede scapy.
Validação de hardening de DHCP whitehat: esgotar um pool, sequestrar leases de vizinhos, expulsar hosts de seus endereços com ARP forjado e relatar se a rede impediu você. Requer root e Python 3.11+.
Debian / Kali: baixe o .deb mais recente de
Lançamentos e instale-o —
ele coloca dhcpig e dhcpig-web no PATH, sem precisar de 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
Instalação global (qualquer Linux, Python 3.11+, sem venv):
git clone https://github.com/kamorin/DHCPig && cd DHCPig
sudo pip install --break-system-packages .
sudo dhcpig-web --open
Instala direto no Python do sistema como root, então sudo dhcpig-web encontra o comando sem
complicações de caminho .venv/bin/. --break-system-packages substitui a proteção PEP 668 do Debian/Kali
contra o pip tocar em pacotes do sistema — essa proteção existe para proteger pacotes gerenciados pelo apt, não
porque esta instalação é incomum; o .deb ou um venv evitam precisar dela completamente.
A partir do código-fonte (qualquer 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
Abra a URL impressa http://127.0.0.1:8787/?token=.... Três pegadinhas:
.venv/bin/
— sudo redefine PATH.?token= é obrigatório. Sem ele, você recebe 401s e uma página em branco.ssh -L 8787:127.0.0.1:8787 user@<vm-ip>. Remova --open.No Debian/Kali, execute sudo apt install -y python3-venv primeiro se a etapa do venv falhar.
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 imprime apenas os resultados; -v3 adiciona depuração em nível de pacote. Referência completa das opções: man dhcpig
(ou packaging/dhcpig.1 antes da instalação).
Exaustão de DHCP (exhaust) — destrutivo
Liberação de DHCP para clientes ativos (release) — destrutivo
Pós-exaustão / Reset (release-previous) — recuperação
--max-age descarta entradas obsoletasEncontrar vizinhos (active-scan) — somente leitura
Varredura passiva (scan) — somente leitura, apenas CLI
Tudo vai para o log de eventos, do pior primeiro: descobertas, depois uma linha por host, depois um
resumo OUTCOME. Verbosity 0 (web) ou -v0 (CLI) oculta o tráfego de pacotes. A exportação JSON
é o registro completo — o log é um resumo.
Os leases são mantidos após uma execução para que o estado esgotado possa ser verificado. Libere-os:
sudo .venv/bin/dhcpig restore eth0 # same process still running
sudo .venv/bin/dhcpig release-previous eth0 # any time later, from the lease journal
O diário ($XDG_STATE_HOME/dhcpig/leases-<iface>.jsonl) registra MAC, IP, servidor e
timestamp por lease tomado — dados da operação. Apague-o ao terminar.
Execute isso apenas contra redes que você possui ou para as quais está explicitamente autorizado a testar. release e
exhaust interrompem clientes ativos por design; --scope é opcional e tem como padrão o segmento
inteiro. Os autores não são responsáveis pelo uso indevido.
Notas de design e detalhes internos: docs/DESIGN.md. Contribuição: CONTRIBUTING.md.
Licença: GPL v2 ou posterior.
| Opção |
|---|
--dry-run | somente reconhecimento: varredura ARP + transações de controle executadas de verdade, nada de mutação é enviado |
--scope CIDR | limita os alvos (repetível); o padrão é a própria rede da interface |
--rate N | pps, padrão 7 — não em exhaust, que se auto-regula |
--no-evict | pula a fase de conflito ARP |
--report FILE | grava um relatório de sessão em FILE quando a execução termina; o formato segue a extensão de FILE (.json/.csv/.html, padrão JSON) |
--client-mac MAC | somente exhaust; use este MAC em vez de um aleatório (repetível — rotaciona pela lista) |
--request-option SPEC | exhaust/active-scan; conteúdo da opção DHCP 55 (parameter-request-list) a enviar, ex.: 12,14-19,23 (padrão: o perfil integrado na ordem do macOS) |
--no-spoof-eth-src | somente exhaust; use o MAC real da NIC como origem Ethernet para cada quadro (Wi-Fi; APs descartam quadros cujo MAC de origem não é o da estação associada) |