Enviando opções de fornecedor específicas do DHCP para um servidor Windows

6

Meu objetivo é enviar algumas informações (url e um token único) para uma máquina com Windows. Ele está funcionando bem para servidores GNU / Linux, porque eu recebo as informações de /var/lib/dhcp/dhcp.lease ou similar. Esta é minha configuração:

servidor dhcp (servidor 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";
    }

A única maneira que encontrei para obter essas informações no servidor do Windows está no registro. Ao adicionar aqui , em HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ services \ Tcpip \ Parâmetros \ Interfaces {ID} você pode encontrar a chave chamada DhcpInterfaceOptions .

O problema é que as informações nesta chave estão "corrompidas". Vou tentar explicar.

Com o Wireshark, posso ver uma resposta DHCP bem formada do meu servidor DHCP com um conjunto de opções 43. Esta opção contém exatamente o que estou procurando. Quando eu tento lê-lo no registro contém um monte de lixo e uma parte da URL está faltando.

As opções de DHCP RFC 2132 definem o seguinte protocolo:

Code   Len   Vendor-specific information
+-----+-----+-----+-----+---
|  43 |  n  |  i1 |  i2 | ...
+-----+-----+-----+-----+---

Eu observei que o Windows está fazendo algo semelhante depois de obter a opção. Quer dizer, se o URL é ' link ', o windows faz o 'h' como ID, 't' como o comprimento e começa a ler depois o segundo 't'. Meu URL é maior que o último caractere imprimível ASCII (~) e não consigo fazer nenhuma solução alternativa sobre isso.

Atualização 1

Captura WireShark:

Option: (t=43,l=16) Vendor-Specific Information
  Option: (43) Vendor-Specific Information
  Length: 16
  Value: 687474703a2f2f55524c2f544f4b454e (http://URL/TOKEN)

Registro do 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

Atualização 2

Se a URL for menor que o tamanho definido no protocolo do Windows , a URL não será mostrada no registro. No meu caso, 'h' será o identificador e 't' o tamanho (116). Se o URL for:

http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

O registro contém algo como eu colei anteriormente. O URL tem exatamente 117 caracteres, mas usamos 2 para id e size. isso significa que os dados são 115. Não é suficiente.

se eu adicionar um "A" ao meu URL:

http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Em seguida, o registro contém:

"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 é a representação hexadecimal de 'A'.

    
por Seoman 18.05.2012 / 20:51

2 respostas

2

A solução implementada foi:

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;
}

Em seu contrato, adicione a seguinte linha:

supersede yourCompany.url = "http://URL"

você pode mudar o .url para o que você quiser. Apenas certifique-se de alterar o nome da opção no espaço da sua empresa.

Usando esse método, posso ver o URL completo no registro.

    
por 24.05.2012 / 00:38
1

Eu não acho que o resultado esteja correto para a configuração do servidor. Geralmente isso é usado pela configuração do cliente dhcp.

Tente adicionar isso à sua configuração do dhcpd e veja se você pode ver as opções no registro

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";
    
por 22.05.2012 / 23:06