这是我的第一个问题,所以请不要对我太苛刻。我真的很努力地使用了搜索功能,也尝试了一些东西。
问题: 我们的 .NET windows 应用程序通过 TCP/IP 与我们的嵌入式测量仪器进行通信。现在, 我们为我们的设备使用静态 IP。当我们运送我们的仪器(连同 PC 软件)时,客户通常需要建立点对点连接,以便首先更改我们设备的静态 IP 地址。这真的很烦人,不像即插即用。
预期解决方案: 在设备端,我们可以启用 DHCP 模式,因此设备的 IP 地址将由客户网络 DHCP 服务器分配。
我们的计划是扫描本地网络并显示所有设备及其 IP 地址和关联的设备主机名。然后客户选择正确的设备。不幸的是,我们无法设法显示设备在 DHCP 配置期间发送的 DHCP 选项 12(主机名)。 我们使用 Wireshark 来验证设备是否正确运行并使用 DHCP 选项 12 发送其主机名。
我们还尝试使用一些第三方工具(“MyLanViewer”)来扫描本地 Intranet 并显示所有设备及其名称。我们的仪器被识别了,但是名称被标记为“N/A”
方法: 我们使用IpHlpApi.dll来使用
GetIpNetTable
。这工作正常,我们获得了本地范围内可用的所有 IP 地址。但是当我们想要读取仪器相关 IP 地址的IPHostEntry
时,Dns.GetHostEntry(ipAddressOfOurDevice)
抛出异常“主机未知”。
可以轻松读取基于windows的DHCP客户端/计算机的主机名。
有谁知道如何使用 Windows API 读取任何 IP 地址的 DHCP 选项 12?
您可以使用 https://github.com/microsoft/CsWin32 创建 PInvoke 存根。
Dns.GetHostEntry
使用DNS
(不是DHCP
),但在Windows上它还包括NetBIOS
,这就是为什么你只能解析Windows客户端的原因。