Моя цель - отправить некоторую информацию (URL-адрес и одноразовый токен) на машину Windows. Он отлично работает для серверов GNU / Linux, потому что я получаю информацию из /var/lib/dhcp/dhcp.lease или аналогичного. Это моя установка:
dhcp-сервер (сервер GNU / Linux):
host windows {
dynamic;
hardware ethernet XX:XX:XX:XX:XX:XX;
fixed-address 10.70.10.107;
supersede vendor-encapsulated-options "http://URL/TOKEN";
}
Единственный способ получить эту информацию на сервере Windows - это реестр. Как я добавил Вот, в HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ services \ Tcpip \ Parameters \ Interfaces {ID} вы можете найти ключ с именем DhcpInterfaceOptions.
Проблема в том, что информация об этом ключе «повреждена». Попробую объяснить.
С Wireshark я могу видеть правильно сформированный ответ DHCP от моего DHCP-сервера с набором 43 параметров. Этот вариант содержит именно то, что я ищу. Когда я пытаюсь прочитать его, в реестре много мусора, а часть URL-адреса отсутствует.
Параметры DHCP RFC 2132 определяет следующий протокол:
Code Len Vendor-specific information
+-----+-----+-----+-----+---
| 43 | n | i1 | i2 | ...
+-----+-----+-----+-----+---
Я заметил, что Windows делает что-то подобное после получения этой опции. Я имею в виду, если URL-адрес 'http: // URL / ТОКЕН'это окно устанавливает' h 'как идентификатор,' t 'как длину и начинает читать после второго' t '. Мой URL-адрес длиннее, чем последний печатаемый символ ASCII (~), и я не могу найти обходного пути.
Обновление 1
WireShark захват:
Option: (t=43,l=16) Vendor-Specific Information
Option: (43) Vendor-Specific Information
Length: 16
Value: 687474703a2f2f55524c2f544f4b454e (http://URL/TOKEN)
Реестр Windows:
"DhcpInterfaceOptions"=hex:06,00,00,00,00,00,00,00,08,00,00,00,00,00,00,00,52,\
45,b7,4f,0a,46,0a,01,08,08,08,08,03,00,00,00,00,00,00,00,04,00,00,00,00,00,\
00,00,52,45,b7,4f,0a,46,0a,01,0f,00,00,00,00,00,00,00,0f,00,00,00,00,00,00,\
00,52,45,b7,4f,74,50,1f,2b,6f,61,6f,75,75,6a,3f,64,6e,77,2e,00,01,00,00,00,\
00,00,00,00,04,00,00,00,00,00,00,00,52,45,b7,4f,ff,ff,ff,00,36,00,00,00,00,\
00,00,00,04,00,00,00,00,00,00,00,52,45,b7,4f,0a,46,0a,01,35,00,00,00,00,00,\
00,00,01,00,00,00,00,00,00,00,52,45,b7,4f,05,00,00,00,fc,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,2a,bd,b6,4f,33,00,00,00,00,00,00,00,04,00,00,00,\
00,00,00,00,52,45,b7,4f,00,00,8c,a0
Обновление 2
Если URL-адрес короче размера, указанного в Протокол Windows, URL-адрес не отображается в реестре. В моем случае «h» будет идентификатором, а «t» - размером (116). Если URL-адрес:
http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
В реестре есть что-то вроде того, что я вставил ранее. URL-адрес составляет ровно 117 символов, но мы используем 2 для идентификатора и размера. это означает, что данных 115. Недостаточно.
если я добавлю к своему URL-адресу букву «А»:
http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Тогда реестр содержит:
"DhcpInterfaceOptions"=hex:68,00,00,00,00,00,00,00,74,00,00,00,01,00,00,00,62,\
0e,bb,4f,74,70,3a,2f,2f,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,\
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,\
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,\
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,\
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,06,00,00,00,00,00,\
00,00,08,00,00,00,00,00,00,00,62,0e,bb,4f,0a,46,0a,01,08,08,08,08,03,00,00,\
00,00,00,00,00,04,00,00,00,00,00,00,00,62,0e,bb,4f,0a,46,0a,01,0f,00,00,00,\
00,00,00,00,0f,00,00,00,00,00,00,00,62,0e,bb,4f,75,61,4a,1f,31,4c,ca,11,55,\
6f,2e,63,1f,6d,fe,00,01,00,00,00,00,00,00,00,04,00,00,00,00,00,00,00,62,0e,\
bb,4f,ff,ff,ff,00,33,00,00,00,00,00,00,00,04,00,00,00,00,00,00,00,62,0e,bb,\
4f,00,00,8c,a0,36,00,00,00,00,00,00,00,04,00,00,00,00,00,00,00,62,0e,bb,4f,\
0a,46,0a,01,35,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,62,0e,bb,4f,05,\
00,00,00
41 - шестнадцатеричное представление буквы «А».
Реализованное решение было:
dhcpd.conf:
option space yourCompany;
option yourCompany.url code 128 = text;
class "vendor-classes" {
match option vendor-class-identifier;
}
subclass "vendor-classes" "MSFT 5.0" {
vendor-option-space yourCompany;
}
В договоре аренды добавьте следующую строку:
supersede yourCompany.url = "http://URL"
вы можете изменить .url на все, что захотите. Просто убедитесь, что вы изменили название опции в поле yourCompany.
Используя этот метод, я могу увидеть полный URL-адрес в реестре.
Я не думаю, что замена правильна для конфигурации сервера. Обычно это используется конфигурацией клиента dhcp.
Попробуйте добавить это в свою конфигурацию dhcpd и посмотрите, можете ли вы увидеть параметры в реестре.
option space ISC code width 1 length width 1 hash size 3;
option ISC.sample code 1 = text;
option vendor.ISC code 2495 = encapsulate vivso-sample;
option vendor-class.ISC code 2495 = text;
option ISC.sample "configuration text here";
option vendor-class.ISC "vendor class here";