Назад | Перейти на главную страницу

Отправка параметров поставщика DHCP на сервер Windows

Моя цель - отправить некоторую информацию (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";