我需要比较一些主机名,并告诉它们是否代表同一主机,例如:
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;
}
我没有包含主机地址数组的错误处理,但是我不确定如果它返回多个地址该怎么办,这是否意味着它们代表不同的机器?有没有更好的方法来比较它们?我需要检查那些主机是否指向同一台机器。
答案 0 :(得分:2)
一般的答案是否定的,如果您的机器有2个网卡(例如),则无法确定它是否来自同一台机器,因为它实际上是2个不同的网络元素。
但是,您可以处理一些特殊情况,例如localhost与您提到的127.0.0.1。
当你从DNS查询中获得多个IP时,它通常意味着这些机器不相同,因为这种技术通常用于不同机器之间的负载平衡。
过去有很多黑客技术可以发现2 ips是否是同一台机器,在某些情况下你可以获得机器的内部时间,或者如果它以连续顺序打开端口你也可以使用它。但我强烈建议不要这样做。如果没有进行此项检查,可能会更好地实现您的目标(例如,如果您有一个Web应用程序,则可以轻松地使用Cookie)。再次,需要更多的背景来帮助。