从Dns.GetHostEntry()获取IPv4地址

我在这里有一些代码在IPv4机器上很好,但是在我们的构build服务器(IPv6)上失败了。 简而言之:

IPHostEntry ipHostEntry = Dns.GetHostEntry(string.Empty); 

GetHostEntry的文档说传入string.Empty将得到你本地主机的IPv4地址。 这是我想要的。 问题是它在我们的IPv6机器上返回string“:: 1:”,我相信它是IPv6地址。

从任何其他IPv4机器ping机器给出了一个很好的IPv4地址…并从自己做一个“ping -4机器名”给出正确的IPv4地址….但定期从它自己给出“:: 1:”。

我怎样才能从本身获得这台机器的IPv4?

你看过回报中的所有地址 ,丢弃InterNetworkV6家族中的哪些,只保留IPv4的?

要查找所有本地IPv4地址:

 IPAddress[] ipv4Addresses = Array.FindAll( Dns.GetHostEntry(string.Empty).AddressList, a => a.AddressFamily == AddressFamily.InterNetwork); 

或者使用Array.FindArray.FindLast如果你只想要一个。

  public Form1() { InitializeComponent(); string myHost = System.Net.Dns.GetHostName(); string myIP = null; for (int i = 0; i <= System.Net.Dns.GetHostEntry(myHost).AddressList.Length - 1; i++) { if (System.Net.Dns.GetHostEntry(myHost).AddressList[i].IsIPv6LinkLocal == false) { myIP = System.Net.Dns.GetHostEntry(myHost).AddressList[i].ToString(); } } } 

在publicvariables中声明myIP和myHost,并在窗体的任何函数中使用。

 IPHostEntry ipHostInfo = Dns.GetHostEntry(serverName); IPAddress ipAddress = ipHostInfo.AddressList .FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork); 
  public static string GetIPAddress(string hostname) { IPHostEntry host; host = Dns.GetHostEntry(hostname); foreach (IPAddress ip in host.AddressList) { if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { //System.Diagnostics.Debug.WriteLine("LocalIPadress: " + ip); return ip.ToString(); } } return string.Empty; } 

要find所有有效的地址列表,这是我用过的代码

 public static IEnumerable<string> GetAddresses() { var host = Dns.GetHostEntry(Dns.GetHostName()); return (from ip in host.AddressList where ip.AddressFamily == AddressFamily.lo select ip.ToString()).ToList(); } 

IPv6的

lblIP.Text = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName).AddressList(0).ToString()

IPv4的

lblIP.Text = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName).AddressList(1).ToString()