Portable laptop-side DHCP server for storage/server engineers. One-click, picks a NIC, raises DHCP with live client table and ping.
- .github/workflows/release.yml: on tag push, build exe via PyInstaller, package portable zip, attach SHA-256, create GitHub Release. - CHANGELOG.md: Keep a Changelog format, semver. - .github/ISSUE_TEMPLATE/: bug_report.yml + feature_request.yml + config.yml routing security reports to private advisories. |
||
|---|---|---|
| .github | ||
| .gitignore | ||
| CHANGELOG.md | ||
| dhcpsrv_app.py | ||
| LICENSE | ||
| README.md | ||
| SECURITY.md | ||
dhcpsrv
A tiny portable DHCP server for the laptop of a storage/server engineer. One double-click — pick a NIC — done. Live table of clients, ping status, packet counters. No install, no Python required on the target machine.
Built for the “plug the cable in, watch a BMC pop up with an IP” workflow during firmware updates, recovery, and benchmarks.
Made by engelgardt.
Download
Grab the latest release: releases page.
The asset is dhcpsrv-portable-vX.Y.Z.zip (~12 MB).
Run
- Unzip anywhere.
- Double-click
dhcpsrv.exe. - Accept the UAC prompt (admin is needed to bind UDP/67 and reconfigure the NIC).
- Pick the network adapter wired to your server or switch — that's the only question.
Ctrl+Cto stop. You'll be asked whether to revert the NIC to DHCP.
Defaults (no other prompts)
| Parameter | Value |
|---|---|
| Server IP | 10.10.10.1/24 |
| Pool | 10.10.10.2 .. 10.10.10.51 (50 addresses) |
| Lease | 7200 s (2 hours — survives long stress tests) |
| TFTP option | server IP (BMC will see your Tftpd32 immediately) |
What's on screen
┌─ dhcpsrv v1.0.0 made by engelgardt ────────────────────────────────────┐
│ Server: 10.10.10.1/255.255.255.0 Pool: 10.10.10.2–10.10.10.51 … │
│ Leases: 3/50 Pkts: 47 DISCOVER: 12 REQUEST: 11 RELEASE: 0 │
└─────────────────────────────────────────────────────────────────────────┘
┌─ Clients ───────────────────────────────────────────────────────────────┐
│ # │ IP │ Hostname │ MAC │ Last seen │ Ping │
│ 1 │ 10.10.10.2 │ vegman-r120 │ a0:c5:f2:13:57:46 │ 17:42:18 │ OK │
│ 2 │ 10.10.10.3 │ vegman-s220 │ 70:b3:d5:11:22:33 │ 17:42:21 │ -- │
└─────────────────────────────────────────────────────────────────────────┘
┌─ Events ────────────────────────────────────────────────────────────────┐
│ [17:42:18] DISCOVER a0:c5:f2:13:57:46 → OFFER 10.10.10.2 │
│ [17:42:18] REQUEST a0:c5:f2:13:57:46 → ACK 10.10.10.2 │
└─────────────────────────────────────────────────────────────────────────┘
Typical scenarios
- VEGMAN with shared LOM — one cable into the BMC/host port, BMC and the host OS both get IPs from this DHCP.
- 8-port switch — laptop on one port, up to 7 servers on the rest; the 50-address pool covers everyone.
- Direct cable into a dedicated Mgmt port — single client (the BMC).
Compatibility
- Windows 10 / 11.
- Filters out wireless / VPN / virtual adapters from the picker (Wi-Fi, Cisco AnyConnect, Hyper-V, VMware, VirtualBox, TAP/TUN, WireGuard, OpenVPN, Tailscale, ZeroTier).
- NIC names with spaces or non-ASCII characters are quoted correctly for
netsh.
Notes
- Nothing is installed on your machine. Delete the folder to remove.
- The UAC prompt appears every time. (If you want it gone on your machine, wire
dhcpsrv.exethrough a Scheduled Task with “Run with highest privileges” and launch viaschtasks /run /tn dhcpsrv.) - If Tftpd32 has its DHCP module enabled, disable it — UDP/67 is then taken.
- Lease defaults to 7200 s; the client renews at half lease. If you want it effectively forever, the source supports
2147483647— rebuild from source if you really need it.
Build from source
python -m pip install rich pyinstaller
python -m PyInstaller --onefile --uac-admin --console --name dhcpsrv dhcpsrv_app.py
License
MIT — see LICENSE.