# dhcpsrv [![Последний релиз](https://img.shields.io/github/v/release/Engelgardt23/dhcpsrv)](https://github.com/Engelgardt23/dhcpsrv/releases/latest) [![Лицензия: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [English](README.md) | Русский Маленький портативный **DHCP-сервер** для ноутбука инженера хранения / серверов. Двойной клик — выбрал сетевую — готово. Живая таблица клиентов, статус ping, счётчики пакетов. Ничего не устанавливается, Python на целевой машине не нужен. Сделан под сценарий «воткнул кабель, увидел как BMC получил IP» во время прошивки, восстановления и бенчмарков. > **Автор: engelgardt.** --- ## Скачать Последний релиз: [**страница релизов**](https://github.com/Engelgardt23/dhcpsrv/releases/latest). Архив `dhcpsrv-portable-vX.Y.Z.zip` (~12 МБ). ## Запуск 1. Распакуй куда угодно. 2. Двойной клик по `dhcpsrv.exe`. 3. **При первом запуске** программа спросит язык интерфейса (1 — English, 2 — Русский). Ответ запишется в `config.ini` рядом с exe — потом можно поменять руками. 4. Подтверди UAC (admin нужен, чтобы занять UDP/67 и переключить адаптер на статический IP). 5. Выбери сетевой адаптер, воткнутый в твой сервер или коммутатор — это единственный вопрос. 6. `Ctrl+C` — стоп. Спросит, вернуть ли адаптер обратно в DHCP. ## Настройки по умолчанию (никаких других вопросов) | Параметр | Значение | |---|---| | IP сервера | `10.10.10.1/24` | | Пул | `10.10.10.2 .. 10.10.10.51` (50 адресов) | | Lease | `7200 с` (2 часа — переживёт долгий стресс-тест) | | Опция TFTP | IP сервера (BMC сразу увидит твой Tftpd32) | ## Что на экране ``` ┌─ dhcpsrv v1.2.0 ────────────────────────────────────────────────────────┐ │ Сервер: 10.10.10.1/255.255.255.0 Пул: 10.10.10.2–10.10.10.51 … │ │ Аренды: 3/50 Пакетов: 47 DISCOVER: 12 REQUEST: 11 RELEASE: 0 │ └─────────────────────────────────────────────────────────────────────────┘ ┌─ Клиенты ───────────────────────────────────────────────────────────────┐ │ # │ IP │ Имя хоста │ MAC │ Последний │ Пинг │ │ 1 │ 10.10.10.2 │ server-01 │ a0:c5:f2:13:57:46 │ 17:42:18 │ OK │ │ 2 │ 10.10.10.3 │ server-02 │ 70:b3:d5:11:22:33 │ 17:42:21 │ -- │ └─────────────────────────────────────────────────────────────────────────┘ ┌─ События ───────────────────────────────────────────────────────────────┐ │ [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 │ └─────────────────────────────────────────────────────────────────────────┘ ``` ## Типичные сценарии - **Сервер с общим LOM** — один кабель в порт BMC/host, и BMC и хост-ОС получают IP с этого DHCP. - **8-портовый свитч** — ноут на одном порту, до 7 серверов на остальных; пул из 50 адресов покрывает всех. - **Прямой кабель в выделенный Mgmt-порт** — один клиент (BMC). ## Совместимость - Windows 10 / 11. - В списке адаптеров отфильтровано всё лишнее (Wi-Fi, Cisco AnyConnect, Hyper-V, VMware, VirtualBox, TAP/TUN, WireGuard, OpenVPN, Tailscale, ZeroTier). - Имена адаптеров с пробелами или не-ASCII экранируются корректно для `netsh`. ## Конфиг При первом запуске рядом с `dhcpsrv.exe` появится `config.ini`: ```ini # Чтобы сменить язык интерфейса, измените 'language' ниже. # Допустимые значения: en, ru [General] language = ru ``` В будущих релизах сюда же переедут пул, lease и IP сервера — пока что переменная одна. ## Заметки - На машине ничего не устанавливается. Удалить — стереть папку. - UAC спросит каждый раз. (Если хочешь убрать на *своей* машине — пропусти `dhcpsrv.exe` через Scheduled Task с галкой «Run with highest privileges» и запускай через `schtasks /run /tn dhcpsrv`.) - Если в Tftpd32 включён модуль DHCP — отключи, UDP/67 окажется занят. - Lease по умолчанию 7200 с; клиент продлевает в середине срока. Если нужно «навсегда», исходник поддерживает `2147483647` — пересобери из исходников. ## Сборка из исходников ``` python -m pip install rich pyinstaller python -m PyInstaller --onefile --uac-admin --console --name dhcpsrv dhcpsrv-launcher.py ``` ## Лицензия MIT — см. [LICENSE](LICENSE).