【发布时间】:2011-11-16 12:30:51
【问题描述】:
我需要比较几个主机名并判断它们是否代表同一个主机,例如:
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:0:0:0:0:0:0:1;p -
一个主机名可以有多个 IP 地址是正确的 - 考虑一台有 5 个网卡的 PC 的情况......请参阅support.microsoft.com/kb/110703 进行确认。
-
@RB - 很少有 5 个网卡只是将多个 IP 地址分配给单个连接。
标签: c# comparison host