Небольшая библиотека на D для получения и разбора DHCP-опций на Linux.
- D 100%
| .vscode | ||
| example | ||
| source/dhcpop | ||
| .gitignore | ||
| dub.json | ||
| dub.selections.json | ||
| README.md | ||
dhcpop
dhcpop — мини-библиотека на D для получения DHCPACK и извлечения DHCP-опций на Linux.
Возможности
- Минимальный DHCP DORA: DISCOVER → OFFER → REQUEST → ACK
- Привязка UDP-сокета к интерфейсу: SO_BINDTODEVICE
- Поиск опций с учётом Option Overload (52):
- base options (после cookie)
- BOOTP поля
sname/fileкак TLV-потоки
- Поддержка SPACE-опций: значение опции трактуется как TLV поток
suboptions - Декодирование значений по схеме типов (в стиле ISC DHCP):
ip-address,string/text,boolean/flaguint8/16/32,int8/16/32array of [type](для чисел иip-address)
Ограничения
- Lease lifecycle (renew/rebind) не реализован
- Реализация ориентирована на Linux
- Используется broadcast
255.255.255.255:67, relay сценарии не покрываются
Требования
- bind на UDP/68:
rootилиCAP_NET_BIND_SERVICE
Установка (DUB)
Добавить как зависимость:
{
"dependencies": {
"dhcpop": {
"repository": "git+https://git.zhirov.kz/dlang/dhcpop.git",
"version": "~master"
}
}
}
Быстрый пример
import dhcpop;
import core.time : dur;
void main()
{
// Схема типов для интересующих опций
DHCPopSchema s;
s.setOption(131, DHCPopBaseType.text);
s.setOption(130, DHCPopBaseType.text);
s.setSubOption(130, 1, DHCPopBaseType.ipAddress);
s.setSubOption(130, 2, DHCPopBaseType.string_);
s.setSubOption(130, 3, DHCPopBaseType.string_);
auto c = new DHCPopOptionsClient("eth0");
c.setSchema(s);
DHCPopClientConfig cfg;
cfg.timeout = dur!"seconds"(3);
cfg.tries = 3;
cfg.dump = false;
// Пример 1: обычная опция 131
auto r131 = c.fetchOption(131, cfg);
c.printResult(r131);
// Пример 2: SPACE опция 130 (parseSpace=true)
cfg.parseSpace = true;
auto r130 = c.fetchOption(130, cfg);
c.printResult(r130);
}
Модули
dhcpop.client— объектный API (DHCPopOptionsClient)dhcpop.wire— wire-логика DORA, фильтры xid/mac/cookie, overload-поискdhcpop.tlv— TLV разбор и поискdhcpop.schema— схема типов (option + space/suboptions)dhcpop.typedecode— декодирование по схемеdhcpop.textdecode— best-effort декодер текстаdhcpop.util— MAC/sysfs, big-endian, ipv4, hex dumpdhcpop.types— структуры результата и конфиг
Отладка
Для вывода списка кодов/длин опций в ACK/OFFER:
cfg.dump = true;
Это печатает TLV-коды из base и overload областей (если overload включён сервером).
Лицензия
MIT.