업데이트로 돌아가기
New releaseAug 2, 2026

DHCPig v2.7.2

scapy 네트워크 라이브러리를 사용하여 Python으로 작성된 DHCP 고갈 스크립트

공유

DHCPig

화이트햇 DHCP 강화 검증: 풀(pool)을 고갈시키고, 이웃의 임대(lease)를 가로채고, 위조된 ARP로 호스트를 해당 주소에서 축출하며, 네트워크가 이를 차단했는지 보고합니다. root 권한과 Python 3.11+가 필요합니다.

웹 UI 실행하기

Debian / Kali: 최신 .deb 파일을 Releases에서 받아 설치하세요 — dhcpigdhcpig-webPATH에 등록되며, 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을 여세요. 주의할 점 세 가지:

  • 어느 쪽이든 root가 필요합니다 (raw socket 사용). 소스(venv)에서 실행할 때는 전체 .venv/bin/ 경로를 사용하세요 — sudoPATH를 재설정합니다.
  • ?token=은 필수입니다. 없으면 401 오류와 빈 페이지가 표시됩니다.
  • 헤드리스(headless) 환경인가요? 의도적으로 loopback에 바인딩합니다. 재바인딩하지 말고 포워딩하세요: ssh -L 8787:127.0.0.1:8787 user@<vm-ip>. --open은 빼세요.

Debian/Kali에서 venv 단계가 실패하면 먼저 sudo apt install -y python3-venv를 실행하세요.

CLI

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-evictARP 충돌 단계 건너뛰기
--report FILE실행이 끝나면 세션 보고서를 FILE에 기록함; 형식은 FILE의 확장자를 따름 (.json/.csv/.html, 기본값 JSON)
--client-mac MACexhaust 전용; 임의 MAC 대신 이 MAC을 사용함 (반복 가능 — 목록을 순환)
--request-option SPECexhaust/active-scan; 전송할 DHCP option-55(parameter-request-list) 내용, 예: 12,14-19,23 (기본값: 내장된 macOS 순서 프로필)
--no-spoof-eth-srcexhaust 전용; 모든 프레임의 Ethernet 소스로 실제 NIC MAC을 사용함 (Wi-Fi; AP는 연결된 스테이션의 MAC이 아닌 소스 MAC의 프레임을 버림)

-v0는 결과만 출력하고, -v3는 패킷 수준 디버그를 추가합니다. 전체 플래그 참조: man dhcpig (또는 설치 전에는 packaging/dhcpig.1).

각 모드가 수행하는 작업

DHCP 고갈 (exhaust) — 파괴적

  • 세그먼트를 ARP로 인벤토리한 다음, 이 머신과 알 수 없는 MAC에 대해 DHCP가 작동함을 증명
  • 모든 이웃의 임대를 DHCPRELEASE — 프로토콜은 소유권 증명을 요구하지 않음
  • 서버가 응답을 멈출 때까지 위조된 MAC으로 DISCOVER/REQUEST를 플러딩
  • 풀이 고갈되면 해제된 주소를 이름(option 50)으로 재요청
  • 호스트가 주소를 포기하는지 확인하기 위해, 가져간 주소에 대해 RFC 5227 ARP 충돌을 위조
  • 결과 판정: 이후에 완전히 새로운 클라이언트가 여전히 주소를 받을 수 있었나?

활성 클라이언트 DHCP 해제 (release) — 파괴적

  • 플러딩이 없는 동일한 체인: 인벤토리 → 해제 → 이름으로 재요청 → ARP 충돌
  • 지금 연결된 장치를 대상으로 함; 풀은 그대로 유지되므로 대부분이 다시 획득 가능
  • 결과 판정: 주소를 잃고 새 주소를 얻지 못한 호스트가 있었나?

고갈 후 / 리셋 (release-previous) — 복구

  • 디스크의 임대 저널을 재생하여 이 도구가 가져간 모든 주소를 반환
  • 이 인터페이스, 네트워크 및 DHCP 서버로 필터링됨; --max-age는 오래된 항목을 제거
  • 풀이 이미 고갈되었는지 기록하지만, 어느 쪽이든 저널링된 임대를 해제
  • 결과 판정: 풀을 다시 사용할 수 있나?

이웃 찾기 (active-scan) — 읽기 전용

  • 범위를 ARP 스캔하고, DHCP 서버를 핑거프린팅하기 위해 DHCPINFORM 하나를 전송
  • 주소를 가져가지 않고, 임대를 방해하지 않음

수동 스캔 (scan) — 읽기 전용, CLI 전용

  • DHCP와 ARP를 관찰; option-55 순서로 호스트를 핑거프린팅하고, 실패 시 MAC 벤더로 대체
  • 아무것도 전송하지 않음. 중지할 때까지 실행

실행 결과 읽기

모든 것은 이벤트 로그에 심각도 순으로 기록됩니다: 발견 사항, 그다음 호스트별 한 줄, 마지막으로 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, 서버 및 타임스탬프를 기록합니다 — 작전 데이터입니다. 작업이 끝나면 삭제하세요.

면책 조항

소유하거나 명시적으로 테스트 권한을 받은 네트워크에서만 실행하세요. releaseexhaust는 설계상 활성 클라이언트를 방해합니다. --scope는 선택 사항이며 기본값은 전체 세그먼트입니다. 저자는 오용에 대해 책임지지 않습니다.

설계 노트 및 내부 구조: docs/DESIGN.md. 기여: CONTRIBUTING.md. 라이선스: GPL v2 이상.

카테고리