Frage

Ich habe einige Code hier bekam, die auf IPv4-Maschinen funktioniert gut, aber auf unserem Build-Server (ein IPv6) es funktioniert nicht. Auf den Punkt gebracht:

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

Die Dokumentation für GetHostEntry sagt, dass in string.Empty vorbei finden Sie die IPv4-Adresse des lokalen Host erhalten. Das ist was ich will. Das Problem ist, dass es die Zeichenfolge ist Rückkehr „:: 1:“. Auf unserer IPv6-Maschine, die ich glaube, ist die IPv6-Adresse

Pinging die Maschine von einer anderen IPv4-Maschine gibt eine gute IPv4-Adresse ... und tut „ping -4 Computername“ von selbst gibt die richtige IPv4-Adresse .... aber es regelmäßig Pingen von sich gibt ":: 1:".

Wie kann ich die IPv4 für diese Maschine zu bekommen, von sich selbst?

War es hilfreich?

Lösung

Haben Sie unter alle die Adressen in der Rückkehr, verwerfen die, die von Familie InterNetworkV6 und behalten nur die IPv4 welche?

Andere Tipps

alle lokalen IPv4-Adressen zu finden:

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

oder verwenden Array.Find oder Array.FindLast, wenn Sie nur wollen, ein.

IPHostEntry ipHostInfo = Dns.GetHostEntry(serverName);
IPAddress ipAddress = ipHostInfo.AddressList
    .FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork);
    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();
            }
        }
    }

Deklarieren MyIP und MYHOST in öffentlichen Variable und in jeder Funktion der Form verwendet werden.

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

Um alle gültigen Adressliste finden Dies ist der Code habe ich verwendet

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top