如何正确比较主机名

时间:2011-11-16 12:30:52

标签: c# comparison host

我需要比较一些主机名,并告诉它们是否代表同一主机,例如:

localhost
127.0.0.1
machineName

在C#中最可靠的方法是什么?现在我这样做:

    private bool CompareHosts(string host1, string host2) 
    {
            UriBuilder builder1 = new UriBuilder(); 
            builder1.Host = Dns.GetHostAddresses(host1)[0].ToString();  
            var uri1 = builder1.Uri; 

            UriBuilder builder2 = new UriBuilder(); 
            builder2.Host = Dns.GetHostAddresses(host2)[0].ToString(); 
            var uri2 = builder2.Uri; 

            return Uri.Compare(uri1, uri2, UriComponents.Host, 
                   UriFormat.Unescaped, StringComparison.OrdinalIgnoreCase) == 0;
    }

我没有包含主机地址数组的错误处理,但是我不确定如果它返回多个地址该怎么办,这是否意味着它们代表不同的机器?有没有更好的方法来比较它们?我需要检查那些主机是否指向同一台机器。

1 个答案:

答案 0 :(得分:2)

一般的答案是否定的,如果您的机器有2个网卡(例如),则无法确定它是否来自同一台机器,因为它实际上是2个不同的网络元素。

但是,您可以处理一些特殊情况,例如localhost与您提到的127.0.0.1。

当你从DNS查询中获得多个IP时,它通常意味着这些机器不相同,因为这种技术通常用于不同机器之间的负载平衡。

过去有很多黑客技术可以发现2 ips是否是同一台机器,在某些情况下你可以获得机器的内部时间,或者如果它以连续顺序打开端口你也可以使用它。但我强烈建议不要这样做。如果没有进行此项检查,可能会更好地实现您的目标(例如,如果您有一个Web应用程序,则可以轻松地使用Cookie)。再次,需要更多的背景来帮助。