389 Stimmen

Lokale IP-Adresse abrufen

Im Internet gibt es mehrere Stellen, die zeigen, wie man eine IP-Adresse erhält. Und viele von ihnen sehen so aus wie dieses Beispiel:

String strHostName = string.Empty;
// Getting Ip address of local machine...
// First get the host name of local machine.
strHostName = Dns.GetHostName();
Console.WriteLine("Local Machine's Host Name: " + strHostName);
// Then using host name, get the IP address list..
IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);
IPAddress[] addr = ipEntry.AddressList;

for (int i = 0; i < addr.Length; i++)
{
    Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString());
}
Console.ReadLine();

Bei diesem Beispiel erhalte ich mehrere IP-Adressen, aber ich bin nur an derjenigen interessiert, die der Router dem Computer zuweist, auf dem das Programm läuft: die IP, die ich jemandem geben würde, wenn er z. B. auf einen freigegebenen Ordner auf meinem Computer zugreifen möchte.

Wenn ich nicht an ein Netzwerk angeschlossen bin und direkt über ein Modem ohne Router mit dem Internet verbunden bin, möchte ich eine Fehlermeldung erhalten. Wie kann ich sehen, wenn mein Computer mit einem Netzwerk mit C# verbunden ist und wenn es dann die LAN-IP-Adresse zu erhalten.

2voto

Ashkan S Punkte 8690

Wenn wir Mrchiefs Antwort mit Linq aktualisieren, haben wir:

public static IPAddress GetLocalIPAddress()
{
   var host = Dns.GetHostEntry(Dns.GetHostName());
   var ipAddress= host.AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
   return ipAddress;
}

2voto

Michael Jordan Punkte 343

Dies gibt die Adressen aller Schnittstellen zurück, die Gateway-Adressen und Unicast-Adressen in zwei separaten Listen, IPV4 und IPV6, haben.

public static (List<IPAddress> V4, List<IPAddress> V6) GetLocal()
{
    List<IPAddress> foundV4 = new List<IPAddress>();
    List<IPAddress> foundV6 = new List<IPAddress>();

    NetworkInterface.GetAllNetworkInterfaces().ToList().ForEach(ni =>
    {
        if (ni.GetIPProperties().GatewayAddresses.FirstOrDefault() != null)
        {
            ni.GetIPProperties().UnicastAddresses.ToList().ForEach(ua =>
            {
                if (ua.Address.AddressFamily == AddressFamily.InterNetwork) foundV4.Add(ua.Address);
                if (ua.Address.AddressFamily == AddressFamily.InterNetworkV6) foundV6.Add(ua.Address);
            });
        }
    });

    return (foundV4.Distinct().ToList(), foundV6.Distinct().ToList());
}

1voto

sgjsfth sthseth Punkte 11

Denken Sie daran, dass Sie im allgemeinen Fall mehrere NAT-Übersetzungen und mehrere DNS-Server haben können, die jeweils auf verschiedenen NAT-Übersetzungsstufen arbeiten.

Was ist, wenn Sie über Carrier Grade NAT verfügen und mit anderen Kunden desselben Carriers kommunizieren wollen? Im Allgemeinen kann man sich nie sicher sein, da man bei jeder NAT-Übersetzung mit unterschiedlichen Hostnamen erscheinen kann.

1voto

Naimish Mungara Punkte 193
string str="";

System.Net.Dns.GetHostName();

IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(str);

IPAddress[] addr = ipEntry.AddressList;

string IP="Your Ip Address Is :->"+ addr[addr.Length - 1].ToString();

1voto

Sourcephy Punkte 139

Obsolet geworden, das funktioniert bei mir

public static IPAddress GetIPAddress()
{ 
 IPAddress ip = Dns.GetHostAddresses(Dns.GetHostName()).Where(address => 
 address.AddressFamily == AddressFamily.InterNetwork).First();
 return ip;
}

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