it-swarm.com.de

Rufen Sie IPv4-Adressen von Dns.GetHostEntry () ab.

Ich habe hier einen Code, der auf IPv4-Computern gut funktioniert, aber auf unserem Build-Server (einem IPv6) schlägt er fehl. In einer Nussschale:

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

Die Dokumentation für GetHostEntry besagt, dass die Übergabe von string.Empty Ihnen die IPv4-Adresse des localhost gibt. Das ist was ich will. Das Problem ist, dass es die Zeichenfolge ":: 1:" auf unserem IPv6-Computer zurückgibt, von dem ich glaube, dass er die IPv6-Adresse ist.

Das Pingen der Maschine von einem beliebigen anderen IPv4-Gerät aus ergibt eine gute IPv4-Adresse ... und ein "ping -4 machinename" von sich aus gibt die korrekte IPv4-Adresse aus. 1: ".

Wie kann ich das IPv4 für diesen Rechner von sich selbst beziehen? 

45
zombat

Haben Sie alle Adressen in der Rückkehr angesehen, die der Familie InterNetworkV6 verwerfen und nur die IPv4-Adressen behalten?

62
Remus Rusanu

So finden Sie alle lokalen IPv4-Adressen:

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

oder verwenden Sie Array.Find oder Array.FindLast, wenn Sie nur einen wünschen.

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

Definieren Sie myIP und myHost in der öffentlichen Variable Und verwenden Sie sie in einer beliebigen Funktion des Formulars.

6
Naveen Desosha
    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;
    }
2

Um alle gültigen Adresslisten zu finden, ist dies der Code, den ich verwendet habe 

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