
Скрипт истощения DHCP, написанный на python с использованием сетевой библиотеки scapy.
Белошляпная проверка защищённости 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
Установка идёт напрямую в системный Python от root, поэтому sudo dhcpig-web находит команду без возни с путями вида .venv/bin/. Флаг --break-system-packages отключает защиту PEP 668 в Debian/Kali, которая запрещает pip трогать системные пакеты, — эта защита существует для сохранности пакетов, управляемых через 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
Откройте напечатанный URL http://127.0.0.1:8787/?token=.... Три подводных камня:
.venv/bin/ — sudo сбрасывает PATH.?token= обязателен. Без него вы получите 401 и пустую страницу.ssh -L 8787:127.0.0.1:8787 user@<vm-ip>. Уберите --open.В Debian/Kali сначала выполните sudo apt install -y python3-venv, если шаг с 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
| Flag | |
|---|---|
--dry-run | только разведка: ARP-скан и контрольные транзакции выполняются по-настоящему, ничего изменяющего состояние не отправляется |
--scope CIDR | ограничивает цели (можно повторять); по умолчанию — собственная сеть интерфейса |
--rate N | пакетов в секунду, по умолчанию 7 — не для exhaust, который сам регулирует темп |
--no-evict | пропустить фазу ARP-конфликтов |
--report FILE | записать отчёт о сессии в FILE по завершении запуска; формат зависит от расширения FILE (.json/.csv/.html, по умолчанию JSON) |
--client-mac MAC | только для exhaust; использовать этот MAC вместо случайного (можно повторять — перебирается по списку) |
--request-option SPEC | exhaust/active-scan; содержимое DHCP-опции 55 (список запрашиваемых параметров) для отправки, например 12,14-19,23 (по умолчанию встроенный профиль порядка macOS) |
--no-spoof-eth-src | только для exhaust; использовать реальный MAC сетевой карты как Ethernet-источник для каждого кадра (Wi-Fi; точки доступа отбрасывают кадры, чей MAC-источник не соответствует ассоциированной станции) |
-v0 выводит только результаты; -v3 добавляет отладку на уровне пакетов. Полный справочник флагов: man dhcpig (или packaging/dhcpig.1 до установки).
Истощение DHCP (exhaust) — разрушительный
Освобождение DHCP для активных клиентов (release) — разрушительный
После истощения / Сброс (release-previous) — восстановление
--max-age отбрасывает устаревшие записиПоиск соседей (active-scan) — только чтение
Пассивное сканирование (scan) — только чтение, только CLI
Всё попадает в журнал событий, сначала самое важное: находки, затем по одной строке на хост, затем сводка OUTCOME. Уровень подробности 0 (в вебе) или -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 или более поздняя.