问题:应用程序中有一个输入字段,用户可以输入主机名或IP地址。我需要告诉输入的地址是否对应一个真实的主机。C#确定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主机名。
什么是“真正的主机”?如果您使用带有域名的Dns.GetHostEntry,则只会发现DNS名称中是否存在条目,而不是其后面是否有计算机。您可以发送一个ICMP回应请求(“ping”)到IP地址,但是如果您没有得到回应,这并不意味着没有电脑。 – dtb 2013-03-20 20:49:01
你看过http://www.codeproject.com/Articles/12072/C-NET-DNS-query-component或http://www.aspnettutorials.com/tutorials/network/net-dns-aspnet2-csharp .aspx?他们都使用Dns.GetHostByName。 – RandomUs1r 2013-03-20 20:52:00
和我同意dtb,我只是平了它。我不确定你是否有能够防止这种情况的要求。 – RandomUs1r 2013-03-20 20:52:47