【问题标题】:Dns.GetHostAddresses returns different resultsDns.GetHostAddresses 返回不同的结果
【发布时间】: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


【解决方案1】:

您得到不同结果的原因是因为您的服务器似乎有 4 个具有不同 IP 地址的不同网络接口。由于您的函数只返回它找到的第一个并且顺序似乎是随机的,因此您将始终获得服务器的 4 个地址之一

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 2019-06-03
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    相关资源
    最近更新 更多