白帽 DHCP 加固验证:耗尽地址池,劫持邻居的租约,通过伪造 ARP 将主机从其地址上驱逐,并报告网络是否阻止了你。需要 root 权限和 Python 3.11+。
Debian / Kali: 从 Releases 获取最新的 .deb 并安装 —— 会将 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 会覆盖 Debian/Kali 中防止 pip 修改系统包的 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(Web 界面)或 -v0(命令行)会隐藏数据包流量。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 或更高版本。
| 标志 |
|---|
--dry-run | 仅侦察:ARP 扫描 + 控制事务真实运行,不发送任何修改性内容 |
--scope CIDR | 限定目标(可重复);默认为接口自身所在的网络 |
--rate N | pps,默认 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(参数请求列表)内容,例如 12,14-19,23(默认:内置的 macOS 顺序配置文件) |
--no-spoof-eth-src | 仅 exhaust;所有帧均使用真实 NIC MAC 作为以太网源地址(Wi-Fi;AP 会丢弃源 MAC 不是关联站的帧) |