Ottieni indirizzi IPv4 da Dns.GetHostEntry ()

Qui ho un codice che funziona perfettamente con le macchine IPv4, ma sul nostro build server (un IPv6) non funziona. In poche parole:

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

La documentazione per GetHostEntry dice che passare in string.Empty ti porterà l’indirizzo IPv4 dell’host locale. Questo è quello che voglio. Il problema è che sta restituendo la stringa “:: 1:” sulla nostra macchina IPv6, che credo sia l’indirizzo IPv6.

Fare il ping della macchina da qualsiasi altra macchina IPv4 dà un buon indirizzo IPv4 … e fare un “ping -4 machinename” da se stesso fornisce l’indirizzo IPv4 corretto …. ma pingarlo regolarmente da solo dà “:: 1:”.

Come posso ottenere IPv4 per questa macchina, da solo?

    Hai guardato tutti gli indirizzi nel reso, scartare quelli della famiglia InterNetworkV6 e conservare solo quelli IPv4?

    Per trovare tutti gli indirizzi IPv4 locali:

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

    oppure usa Array.Find o Array.FindLast se ne vuoi 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(); } } } 

    Dichiara myIP e myHost in Variabile pubblica e utilizza in qualsiasi funzione del modulo.

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

    Per trovare tutti gli indirizzi validi questo è il codice che ho usato

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