
scapy 네트워크 라이브러리를 사용하여 Python으로 작성된 DHCP 고갈 스크립트
화이트햇 DHCP 강화 검증: 풀(pool)을 고갈시키고, 이웃의 임대(lease)를 가로채고, 위조된 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을 여세요. 주의할 점 세 가지:
.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 고갈 (exhaust) — 파괴적
활성 클라이언트 DHCP 해제 (release) — 파괴적
고갈 후 / 리셋 (release-previous) — 복구
--max-age는 오래된 항목을 제거이웃 찾기 (active-scan) — 읽기 전용
수동 스캔 (scan) — 읽기 전용, CLI 전용
모든 것은 이벤트 로그에 심각도 순으로 기록됩니다: 발견 사항, 그다음 호스트별 한 줄, 마지막으로 OUTCOME 요약. Verbosity 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 이상.
| 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 대신 이 MAC을 사용함 (반복 가능 — 목록을 순환) |
--request-option SPEC | exhaust/active-scan; 전송할 DHCP option-55(parameter-request-list) 내용, 예: 12,14-19,23 (기본값: 내장된 macOS 순서 프로필) |
--no-spoof-eth-src | exhaust 전용; 모든 프레임의 Ethernet 소스로 실제 NIC MAC을 사용함 (Wi-Fi; AP는 연결된 스테이션의 MAC이 아닌 소스 MAC의 프레임을 버림) |