我的目标是向 Windows 机器发送一些信息(url 和一次性令牌)。它适用于 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";
}
Run Code Online (Sandbox Code Playgroud)
我发现在 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 | ...
+-----+-----+-----+-----+---
Run Code Online (Sandbox Code Playgroud)
我观察到 Windows 在获得选项后正在做类似的事情。我的意思是,如果Windows 所做的 URL 是“ http://URL/TOKEN ”,则将“h”设置为 ID,将“t”设置为长度,并在第二个“t”之后开始读取。我的 url 比最后一个 ASCII 可打印字符 (~) 长,我对此无能为力。 …