问题:应用程序中有一个输入字段,用户可以在其中输入主机名或 IP 地址。我需要判断输入的地址是否对应于真实主机。
我不是在谈论简单的正则表达式检查或 IPAddress.TryParse 或 Uri.CheckHostName。检查主机名没有困难:如果无法解析为 IP 地址,则 Dns.GetHostEntry 将引发异常。那是小菜一碟。
然而。如果我得到一个 IP 地址输入,那么如果我进行 Dns.GetHostAddresses 调用它总是会成功,即使我输入一个愚蠢的 IP,比如“1.1.1.1”(“1.1.1.1”是 IANA 保留的 IP 地址,我们的 DNS 服务器报告“不存在的主机/域”)。Dns.GetHostAddresses 立即吐出我刚刚传入的 IP,就好像一切都会好起来一样。
我也不能使用 Dns.GetHostEntry,因为有一些 IP 地址(比如我在本地网络上的虚拟机)没有任何与它们关联的 DNS 主机名,但它们仍然有有效的 IP 地址,并且 Dns.GetHostEntry会向那些抛出异常(我猜它会尝试为他们解析主机名?)。
我需要一个方法调用,它实际上告诉我它是否是虚假 IP,即使它看起来像好的 IP 地址(通过 Uri.CheckHostName),但它没有相应的 DNS 主机名。