A Opção 43 do DHCP é um pouco estranha. Os fornecedores podem tratá-lo da maneira que quiserem - alguns esperam que os números das opções correspondam aos números das opções de DHCP, outros não.
A estrutura básica é de 1 byte para uma ID de opção, 1 byte para o comprimento dos dados da opção (n), então n bytes dos dados da opção real - e, enxágue e repita.
Vamos pegar o exemplo do dhcp-options. Eles colocaram as novas linhas em lugares estratégicos para facilitar a leitura. Na realidade, a configuração que eles configuraram é exatamente isso:
02:04:AC:11:41:01:03:12:73:75:6e:64:68:63:70:2d:73:65:72:76:65:72:31:37:2d:31:04:12:2f:65:78:70:6f:72:74:2f:72:6f:6f:74:2f:69:38:36:70:63;
É muito difícil de ler, a menos que você saiba o que está procurando. Vamos dividir as partes:
- Byte 1,
0x02
. Isso diz que esse bloco é config para a opção número 2. Como isso é interpretado depende do fornecedor. - Byte 2,
0x04
. Isso diz que os dados da opção 2 ocuparão os próximos 4 bytes. - Bytes 3-6,
0xAC114101
. Esses quatro bytes são os dados reais. Como você viu quando tentou decodificá-lo, não são dados legíveis. - Byte 7, o início do próximo bloco de opções ,
0x03
. Toda a cadeia começa de novo, isso diz que a seguinte configuração é para a opção 3. - e assim por diante, por 3 seções
Outro exemplo, da página wiki snom:
42:0c:68:74:74:70:3a:2f:2f:74:65:73:74:00:43:12:73:6e:6f:6d:2f:73:65:74:74:69:6e:67:73:2e:70:68:70:00;
- Byte 1,
0x42
. 42 em hexadecimal é 66, para o código de opção 66. - Byte 2,
0x0c
. Comprimento de 12 bytes. - Bytes 3-14,
0x687474703a2f2f7465737400
. Este éhttp://test
com um byte nulo (0x00
) no final. Não tenho certeza porque eles têm isso lá. - Byte 15,
0x43
. Opção 67. - Byte 16,
0x12
. Comprimento de 18 bytes. - Bytes 17 a 34,
0x736e6f6d2f73657474696e67732e70687000
. %código%. Novamente, o byte nulo no final.
Então, digamos que você precisa construir uma opção 43 com snom/settings.php
como opção 66 e http://phone.example.com
como opção 67.
- Byte 1, código de opção 66,
phonesettings.txt
- Byte 2, comprimento de 24 bytes em
0x42
, portanto,http://phone.example.com
- Bytes 3-26, os dados. %código%
- Byte 27, código de opção 67,
0x18
- Byte 28, comprimento de 17 bytes em
0x687474703a2f2f70686f6e652e6578616d706c652e636f6d
, portanto,0x43
- Bytes 29 a 45, dados. %código%
Então, uma string de configuração completa de:
42:18:68:74:74:70:3a:2f:2f:70:68:6f:6e:65:2e:65:78:61:6d:70:6c:65:2e:63:6f:6d:43:11:70:68:6f:6e:65:73:65:74:74:69:6e:67:73:2e:74:78:74;
Se isso não funcionar, tente adicionar os bytes nulos ao final das strings de dados (e aumente o tamanho do campo de acordo) como em seu exemplo - eles podem desejar bytes nulos no final de cada opção ou um mesmo número de bytes para o comprimento de cada opção. Essa é a desvantagem da opção 43 - eles podem fazer o que quiserem!