372 Stimmen

Wie erhalte ich die IP-Adresse des Servers, auf dem meine C#-Anwendung ausgeführt wird?

Ich betreibe einen Server, und ich möchte meine eigene IP-Adresse anzeigen.

Wie lautet die Syntax für die Ermittlung der eigenen (wenn möglich externen) IP-Adresse des Computers?

Jemand hat den folgenden Code geschrieben.

IPHostEntry host;
string localIP = "?";
host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
    if (ip.AddressFamily.ToString() == "InterNetwork")
    {
        localIP = ip.ToString();
    }
}
return localIP;

Allerdings misstraue ich dem Autor generell, und ich verstehe diesen Code nicht. Gibt es einen besseren Weg, dies zu tun?

1voto

Baz Guvenkaya Punkte 1400

Die Frage sagt nichts über ASP.NET MVC aus, aber ich lasse das hier trotzdem stehen:

Request.UserHostAddress

1voto

Hier ist, wie ich es gelöst. Ich weiß, wenn Sie mehrere physische Schnittstellen haben, könnte dies nicht die genaue eth Sie wollen wählen.

private string FetchIP()
{
    //Get all IP registered
    List<string> IPList = new List<string>();
    IPHostEntry host;
    host = Dns.GetHostEntry(Dns.GetHostName());
    foreach (IPAddress ip in host.AddressList)
    {
        if (ip.AddressFamily == AddressFamily.InterNetwork)
        {
            IPList.Add(ip.ToString());
        }
    }

    //Find the first IP which is not only local
    foreach (string a in IPList)
    {
        Ping p = new Ping();
        string[] b = a.Split('.');
        string ip2 = b[0] + "." + b[1] + "." + b[2] + ".1";
        PingReply t = p.Send(ip2);
        p.Dispose();
        if (t.Status == IPStatus.Success && ip2 != a)
        {
            return a;
        }
    }
    return null;
}

1voto

Wolf5370 Punkte 1364
return Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);

Einfache einzelne Codezeile, die die erste interne IPV4-Adresse zurückgibt oder null, wenn es keine gibt. Wurde als Kommentar oben hinzugefügt, könnte aber für jemanden nützlich sein (einige Lösungen oben geben mehrere Adressen zurück, die weiter gefiltert werden müssen).

Es ist auch einfach, loopback anstelle von null zurückgeben ich denke mit:

return Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork) ?? new IPAddress( new byte[] {127, 0, 0, 1} );

1voto

Serge Punkte 6136

Die LINQ-Lösung:

Dns.GetHostEntry(Dns.GetHostName()).AddressList.Where(ip => ip.AddressFamily == AddressFamily.InterNetwork).Select(ip => ip.ToString()).FirstOrDefault() ?? ""

1voto

Ravi Shankar Punkte 155

Um die IP-Adressliste zu finden, habe ich diese Lösung 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();
}

Aber ich persönlich mag die folgende Lösung, um lokale Informationen zu erhalten gültig IP-Adresse

public static IPAddress GetIPAddress(string hostName)
{
    Ping ping = new Ping();
    var replay = ping.Send(hostName);

    if (replay.Status == IPStatus.Success)
    {
        return replay.Address;
    }
    return null;
 }

public static void Main()
{
    Console.WriteLine("Local IP Address: " + GetIPAddress(Dns.GetHostName()));
    Console.WriteLine("Google IP:" + GetIPAddress("google.com");
    Console.ReadLine();
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X