Obtener direcciones IPv4 de Dns.GetHostEntry ()

Aquí tengo un código que funciona muy bien en máquinas IPv4, pero en nuestro servidor de comstackción (un IPv6) falla. En una palabra:

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

La documentación de GetHostEntry dice que al pasar en string.Empty obtendrá la dirección IPv4 del localhost. Esto es lo que quiero. El problema es que devuelve la cadena “:: 1:” en nuestra máquina IPv6, que creo que es la dirección IPv6.

Hacer ping a la máquina desde cualquier otra máquina IPv4 da una buena dirección IPv4 … y hacer un “nombre de máquina ping -4″ de sí mismo da la dirección IPv4 correcta … pero al hacer ping regularmente desde sí mismo se obtiene “:: 1:”.

¿Cómo puedo obtener el IPv4 para esta máquina, desde sí mismo?

¿Has visto todas las direcciones en la statement, descartas las de la familia InterNetworkV6 y solo retienes las de IPv4?

Para encontrar todas las direcciones IPv4 locales:

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

o usa Array.Find o Array.FindLast si solo quieres uno.

  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(); } } } 

Declara myIP y myHost en una variable pública y úsala en cualquier función del formulario.

 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; } 

Para encontrar toda la lista de direcciones válida, este es el código que he usado

 public static IEnumerable 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 ()