便携 DHCP 服务器 v1.0: 单文件 DHCP 引擎 + tkinter GUI
- 完整 DHCP 流程: DISCOVER/OFFER/REQUEST/ACK/NAK/DECLINE/RELEASE/INFORM - 租约管理: 搜索/筛选/详情栏/解除/批量清除/CSV导出 - 保留地址: MAC→IP 绑定、独立租期、在线状态、导入导出 - 静态绑定/PXE 支持/冲突检测/租约持久化/防火墙一键放行 - 协议自检 25 项 + GUI 冒烟 21 项全部通过
This commit is contained in:
+14
@@ -0,0 +1,14 @@
|
||||
# 运行时生成的本地数据(不进版本库)
|
||||
dhcp_config.json
|
||||
dhcp_leases.json
|
||||
__pycache__/
|
||||
|
||||
# 打包产物(体积大, 不入 git)
|
||||
*.exe
|
||||
dist/
|
||||
build/
|
||||
*.spec
|
||||
|
||||
# 系统杂项
|
||||
Thumbs.db
|
||||
desktop.ini
|
||||
+2090
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,118 @@
|
||||
# 便携 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生成
|
||||
@@ -0,0 +1,33 @@
|
||||
@echo off
|
||||
rem ============================================
|
||||
rem 便携 DHCP 服务器 - 一键启动器
|
||||
rem 如需添加防火墙规则, 请右键本文件选择
|
||||
rem "以管理员身份运行", 再在程序里点击"防火墙放行"
|
||||
rem ============================================
|
||||
cd /d "%~dp0"
|
||||
|
||||
where pythonw >nul 2>nul
|
||||
if not errorlevel 1 (
|
||||
start "" pythonw "dhcp_server_app.py"
|
||||
exit /b 0
|
||||
)
|
||||
where python >nul 2>nul
|
||||
if not errorlevel 1 (
|
||||
start "" python "dhcp_server_app.py"
|
||||
exit /b 0
|
||||
)
|
||||
where py >nul 2>nul
|
||||
if not errorlevel 1 (
|
||||
start "" py "dhcp_server_app.py"
|
||||
exit /b 0
|
||||
)
|
||||
|
||||
echo [提示] 未检测到 Python。
|
||||
echo 请先安装 Python 3.10 或更高版本(安装时勾选 "Add python.exe to PATH"):
|
||||
echo https://www.python.org/downloads/
|
||||
echo.
|
||||
echo 排错提示: 如启动后窗口一闪而过, 请在命令行手动运行
|
||||
echo python dhcp_server_app.py
|
||||
echo 即可看到具体报错信息。
|
||||
echo.
|
||||
pause
|
||||
Reference in New Issue
Block a user