在我的C#程序中,我需要获取本地网络上的IP地址、MAC地址和设备名称。同时,有必要只显示那些名称以 tasmota 开头的设备(即我需要找到 sonoff 继电器)。我可以使用
arp -a
命令获取 IP 和 mac,这没有问题。
但是如何获取设备名称呢?
nbtstat
命令不起作用,它说“找不到节点”。如何获取设备名称?有哪些库或命令?
简短回答:
System.Net.Dns.GetHostByAddress()
更长的答案:这些名字首先是从哪里来的?它们本质上并不是网络运营的一部分;而是网络运营的一部分。您应该知道您是否正在处理 NetBIOS 名称、mDNS 名称、设备通过 DHCP 租约报告的名称(然后在路由器的帮助下成为 DNS 名称)。有些机制支持反向查找,有些则不支持。
例如,如果设备将其主机名报告给路由器作为获取 DHCP 租约的一部分(非常常见),然后路由器提供本地 DNS 服务,并且路由器足够智能,还可以提供反向查找,那么您可以使用
getnameinfo()
或更旧的 gethostbyaddr()
– 我相信 C#.NET 的等效项是 System.Net.Dns.GetHostByAddress()
– 执行“反向 DNS” 抬头。不过,并非所有路由器都完全实现了这一点;有些只收集主机名以在自己的 Web UI 中显示(当然,PC 可能不使用路由器作为 DNS)。