【发布时间】:2019-01-18 18:21:37
【问题描述】:
我有这种通过计算机名获取 IIS 服务器的 IP v4 的方法,每次我运行这个函数时,它都会给我不同的结果(它在 4 个不同的 IP 地址之间交替,其中三个在同一范围内一个在 192.168.xx 范围内)
public static string GetIpFromPcName(string PcName = null)
{
try
{
// in order to get ip v4 address
// look here: https://stackoverflow.com/questions/6668810/how-do-i-determine-the-local-host-s-ipv4-addresses
// can a pc have multiple ips?
if (string.IsNullOrEmpty(PcName))
return null;
string IP4Address = String.Empty;
var hostEntry = Dns.GetHostEntry(PcName);
var ipaddresses = Dns.GetHostAddresses(PcName);
Console.WriteLine("HostName: {0}", hostEntry.HostName);
Console.WriteLine("Aliases:");
foreach (var entry in hostEntry.Aliases)
{
Console.WriteLine("\t{0}", entry);
}
Console.WriteLine("Addresslist: ");
foreach (var entry in hostEntry.AddressList)
{
Console.WriteLine("\t{0}", entry.ToString());
}
foreach (IPAddress IPA in Dns.GetHostAddresses(PcName))
{
if (IPA.AddressFamily == AddressFamily.InterNetwork)
{
IP4Address = IPA.ToString();
break;
}
}
return IP4Address;
}
catch (Exception ex)
{
Console.WriteLine("Error in getting ip address for {0}", PcName);
return null;
}
}
另外,我观察到的一件奇怪的事情是,为Addresslist 打印的内容与函数的最终返回值不同。
问题是……
为什么我每次都得到不同的结果?
【问题讨论】:
-
你可以打开一个CMD并在Windows上输入ipconfig或在Linux上输入ifconfig来检查它们是否相同
-
我无权访问该服务器...但我使用
Dns.GetHostEntry(IPAddress.Parse("IpAddress")).HostName进行了检查,它们返回了相同的主机名。 -
顺便说一句:考虑使用字符串插值,如 Console.WriteLine($"HostName: {hostEntry.HostName}");
-
网站是否托管在负载平衡集群上?一个“站点”并不一定意味着一台服务器。
-
我真的不知道,我应该问,如果答案是肯定的,那意味着什么?
标签: c# .net dns ip reverse-dns