将DHCP特定供应商选项发送到Windows服务器

我的目标是发送一些信息(url和一次性令牌)到Windows机器。 这对GNU / Linux服务器来说工作的很好,因为我从/var/lib/dh​​cp/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服务器上获取这些信息的唯一方法是在registry中。 正如我在这里添加的,在HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ services \ Tcpip \ Parameters \ Interfaces {ID}下可以find名为DhcpInterfaceOptions的键。

问题是这个键上的信息是“损坏的”。 我会尽力解释。

使用Wireshark,我可以看到一个格式良好的DHCP答案,来自我的DHCP服务器,带有43个选项集。 这个选项包含我正在寻找的东西。 当我尝试读取它在registry中包含大量的垃圾和部分url丢失。

DHCP选项RFC 2132定义了以下协议:

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

我发现Windows在获得选项后做了类似的事情。 我的意思是,如果URL是' http:// URL / TOKEN ',那么windows 会将 'h'设置为ID,'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) 

Windowsregistry

 "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不会显示在registry中。 在我的情况下,'h'将是标识符,'t'的大小(116)。 如果url是:

 http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 

registry包含像我以前粘贴的东西。 url正好是117个字符,但是我们使用了2个id和大小。 那意味着数据是115.还不够。

如果我添加一个“A”到我的url:

 http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 

那么registry包含:

 "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'的hex表示。

实施的解决scheme是:

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。 只要确保您更改公司的空间上的选项名称。

使用这种方法,我可以看到registry上的完整URL。

我不认为supersede是正确的服务器configuration。 通常这是由DHCP客户端configuration使用。

尝试添加到您的dhcpdconfiguration,看看你是否可以看到在registry中的选项

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