在本地 Intranet 中显示 DHCP 客户端设备的主机名(选项 12)

问题描述 投票:0回答:1

这是我的第一个问题,所以请不要对我太苛刻。我真的很努力地使用了搜索功能,也尝试了一些东西。

问题: 我们的 .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?

c# .net windows hostname dhcp
1个回答
0
投票

似乎此示例提供了您需要的代码https://learn.microsoft.com/en-us/previous-versions/windows/desktop/dhcp/dhcp-client-api-examples#example-1-using-the- dhcprequestparams-函数

您可以使用 https://github.com/microsoft/CsWin32 创建 PInvoke 存根。

Dns.GetHostEntry
使用
DNS
(不是
DHCP
),但在Windows上它还包括
NetBIOS
,这就是为什么你只能解析Windows客户端的原因。

© www.soinside.com 2019 - 2024. All rights reserved.