便携 DHCP 服务器 (Portable DHCP Server)

一个运行在 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生成

S
Description
No description provided
Readme 64 KiB
2026-10-08 15:38:39 +08:00
Languages
Python 99.1%
Batchfile 0.9%