【问题标题】:Convert hostname to only one IP Address将主机名仅转换为一个 IP 地址
【发布时间】:2019-05-26 03:14:42
【问题描述】:

我想创建主机名到 IP 地址,反之亦然转换器。但是我遇到了一个问题,其中 1 个主机名返回 2 个 IP 地址,当我将 IP 地址重新转换为主机名时,只有其中一个返回正确的主机名。

转换CEGN5CG7260FR7.xxxxx.xxx 的示例返回192.168.X.XX10.132.XXX.XXX,但是当重新转换回主机名时,只有10.132.XXX.XXX 返回正确的主机名。

此代码片段用于将主机名转换为 IP 地址:-

// Convert hostname to IP address
            IPHostEntry host = Dns.GetHostEntry(hostList[i]);
            IPAddress[] ipaddr = host.AddressList;
            // Loop through the IP Address array and add the IP address to IP List
            foreach (IPAddress addr in ipaddr)
            {
                if (addr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                     ipList.Add(addr.ToString());
                }
            }
            // Display items in IP Address textbox
            foreach (var ip in ipList)
            {
                ips += ip + Environment.NewLine;
            }
            txtIP.Text = ips;

此代码片段用于将 IP 地址转换为主机名:-

// Convert IP address to hostname
            IPHostEntry IP = Dns.GetHostEntry(IPAddress.Parse(ip));
            if (IP != null)
            {
                 hostList.Add(IP.HostName);
            }
            // Display items in Hostname textbox
            foreach (var hn in hostList)
            {
                hosts += hn + Environment.NewLine;
            }
            txtHost.Text = hosts;

我能做些什么来只获取并显示10.132.XXX.XXX IP 地址而忽略第一个?

【问题讨论】:

  • var ip = ipList.FirstOrDefault(v => v.StartsWith("10.132"))? O:)
  • 恐怕只会接受那些以10.132.开头的人还有一个以172.21开头的ip列表等等。
  • 另一个主机名的输出是什么?是空白还是其他值?
  • 不太清楚为什么要忽略其他 IP 地址。如果您只想要来自特定子网的 IP 地址,那么 John 的回答就足够了。否则你可以拿第一个。
  • 然后您需要检查所有 IP 并找到将解析回主机名的 IP。在我看来,忽略其他 IP 并不是一个很好的做法,尽管我不知道你为什么需要这个。

标签: c# winforms ip-address hostname


【解决方案1】:

您可以尝试使用此代码找到正确的 IP 地址。

 public static string GetLocalIPAddress()
    {
        var host = Dns.GetHostEntry(Dns.GetHostName());
        foreach (var ip in host.AddressList)
        {
            if (ip.AddressFamily == AddressFamily.InterNetwork)
            {
                return ip.ToString();
            }
        }
        throw new Exception("No network adapters with an IPv4 address in the system!");
    }

【讨论】:

  • 我没有尝试将 IP 转换为本地主机名。
  • 提到的代码不是从 IP 地址返回主机名,而是从主机名返回 IP 地址
猜你喜欢
  • 2012-05-20
  • 2014-04-12
  • 2011-09-15
  • 1970-01-01
  • 2014-11-12
  • 2011-03-12
  • 2014-12-19
  • 2014-12-02
  • 2011-05-07
相关资源
最近更新 更多