Files
dhcp-server-win/使用说明.md
T
xuejin.wang a2a1f36092 便携 DHCP 服务器 v1.0: 单文件 DHCP 引擎 + tkinter GUI
- 完整 DHCP 流程: DISCOVER/OFFER/REQUEST/ACK/NAK/DECLINE/RELEASE/INFORM
- 租约管理: 搜索/筛选/详情栏/解除/批量清除/CSV导出
- 保留地址: MAC→IP 绑定、独立租期、在线状态、导入导出
- 静态绑定/PXE 支持/冲突检测/租约持久化/防火墙一键放行
- 协议自检 25 项 + GUI 冒烟 21 项全部通过
2026-10-08 15:35:20 +08:00

118 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 便携 DHCP 服务器 使用说明
一个运行在 Windows 电脑上的轻量 DHCP 服务器(单文件、免安装、图形界面),
用于给局域网里的测试设备临时分配 IP:开发板、IP 摄像头、交换机、PXE 网络启动等。
## 一、环境要求(二选一)
- **直接用 exe(推荐)**:Windows 7 及以上,双击即用,无需安装任何东西
- **源码方式**:需 Python 3.10+(仅用标准库,无需第三方包)
安装时勾选 **Add python.exe to PATH**
## 二、快速开始
1. 双击 **`便携DHCP服务器.exe`**(首次启动约需几秒自解压,属正常现象)
或源码方式:双击 `启动DHCP服务器.bat`
2. 确认「服务网卡 IP」是接入测试网络的网卡地址(可点「刷新本机IP」)
3. 设置地址池,例如 `192.168.10.100 ~ 192.168.10.200`
4. 点击 **▶ 启动服务**
5. 把待分配 IP 的设备接进同一个交换机/Wi-Fi,设为自动获取 IP 即可
> 排错:窗口一闪而过时,在命令行手动运行 `python dhcp_server_app.py` 查看报错。
> 自检:`python dhcp_server_app.py --selftest` 可验证协议引擎是否正常。
## 三、三大管理界面
**客户端列表**:顶部搜索框可按 IP / MAC / 主机名 / 备注实时过滤;状态下拉可只看
已分配 / 预分配 / 已过期。选中任意行,下方详情栏显示该客户端完整信息;
右键弹出快捷菜单(复制、解除租约、设为保留地址)。
**租约管理**:列表工具栏提供「解除选中租约」「清空过期租约」「清空全部租约」,
均带确认弹窗。解除租约后该设备下次续租会被拒绝并重新申请地址。
**保留地址(MAC→IP)**:点「新增保留地址」填写 MAC、固定 IP、备注和可选的
独立租约时长;立即生效无需重启服务。「在线状态」列实时显示该设备是否在线。
在客户端列表中选中某行点「设为保留地址」,可把当前分配的 IP 直接固定给该设备。
支持导入 / 导出 CSV,方便批量维护。
## 四、首次使用必看:防火墙
客户端的 DHCP 请求是发往本机 **UDP 67** 的入站流量,默认会被 Windows 防火墙拦截。
- 右键 `启动DHCP服务器.bat` → **以管理员身份运行**
- 在程序里点击 **「防火墙放行 UDP 67」**(会弹窗确认)
- 之后日常使用无需再管(也可随时点「移除放行」撤销)
对应的手动命令(管理员):
```
netsh advfirewall firewall add rule name="PortableDhcpServer-UDP67" dir=in action=allow protocol=UDP localport=67 profile=any
netsh advfirewall firewall delete rule name="PortableDhcpServer-UDP67"
```
## 五、功能说明
| 功能 | 说明 |
| --- | --- |
| 地址池 | 起始~结束范围内的顺序分配;自动跳过网关、本机 IP、网络号、广播地址 |
| 客户端列表 | 实时查看 IP / MAC / 主机名 / 状态 / 来源 / 租约到期 / 剩余有效期 / 备注 / 最近活动;支持关键字搜索与状态筛选;选中行在下方显示完整详情 |
| 租约管理 | 解除选中租约、一键清除全部过期租约、清空全部租约;到期自动回收;同一设备尽量保持原 IP;停止服务时保存到磁盘 |
| 保留地址 | 按 MAC 固定 IP(即 DHCP 保留地址);支持备注和**单独自定义租约时长**;显示在线/离线/从未上线状态;可编辑、导入/导出 CSV、从客户端列表一键转为保留 |
| 客户端操作 | 右键菜单:复制 MAC / 复制 IP / 解除租约 / 设为保留地址;双击 MAC 复制到剪贴板 |
| 冲突检测 | 分配前先 Ping 候选地址,占用或已被 DECLINE 的地址自动跳过并记入冲突名单 |
| 导出 CSV | 客户端列表、保留地址均可导出为 Excel 可读的 CSV |
| PXE 支持 | 填写 TFTP 服务器(option 66) 和启动文件名(option 67) 即可用于网络启动 |
## 六、常见问题
**1. 启动失败:端口被占用(10013/10048)**
通常是系统开启了「Internet 连接共享 / 移动热点」,其内置 DHCP 分配器占了 UDP 67。
用管理员运行 `net stop SharedAccess` 关闭,或
`netstat -ano -p udp | findstr :67` 查看占用进程。
**2. 客户端拿不到 IP**
- 防火墙没放行(见第四节)
- 设备和电脑不在同一个二层网络(DHCP 依赖广播,不能跨路由器/跨 VPN)
- 网段填错:地址池必须与网卡 IP 同网段
**3. 多网卡电脑**
服务监听所有网卡的 UDP 67,但「服务网卡 IP」决定下发的网关/子网参数。
插着 VPN 或虚拟网卡时请选对网卡,建议只保留接测试网的网卡。
**4. 和路由器的 DHCP 冲突?**
同一网段只能有一个 DHCP 服务器,否则客户端会随机拿到二者之一。
要么关闭路由器 DHCP,要么把电脑接到独立交换机做纯测试网。
## 七、文件说明
| 文件 | 作用 |
| --- | --- |
| `便携DHCP服务器.exe` | **独立可执行程序**,免 Python,可单独拷贝到其他电脑使用 |
| `dhcp_server_app.py` | 主程序源码(引擎 + 界面) |
| `启动DHCP服务器.bat` | 源码方式一键启动(需装 Python) |
| `dhcp_config.json` | 点「保存配置」后生成的配置文件(exe 生成时保存在其所在目录) |
| `dhcp_leases.json` | 运行时自动生成的租约记录(可删除,删除后重新分配) |
> exe 使用提示:配置与租约文件保存在 exe **同一目录**,拷贝 exe 时同目录
> 的这两个 json 可一并拷贝以保留配置。首次运行若 Windows SmartScreen 提示
> "已保护你的电脑",点「更多信息」→「仍要运行」即可(自打包程序未签名属正常现象)。
## 八、重新打包 exe(可选)
当前 `便携DHCP服务器.exe` 已打包完成。修改源码后如需重新打包:
```
python -m venv .temp\dhcppkg
.temp\dhcppkg\Scripts\python.exe -m pip install pyinstaller
.temp\dhcppkg\Scripts\pyinstaller.exe --onefile --windowed --name 便携DHCP服务器 dhcp_server_app.py
```
生成的 `dist\便携DHCP服务器.exe` 可单独拷贝使用。
## 九、使用须知
- 本工具面向**测试/实验网络**,请勿接入生产网络与正式 DHCP 服务混用
- DHCP 基于 UDP 广播,仅适用于与电脑**同一物理网段**的设备
- 程序不做鉴权,同一网段内任何设备都能申请到地址,注意使用场景
> AI生成