Ich weiß, dass ich damit vielleicht ein totes Pferd anremple, aber vielleicht kann ich damit jemandem helfen. Ich habe überall nach einer Möglichkeit gesucht, meine lokale IP-Adresse zu finden, aber überall, wo ich sie finde, steht, dass ich sie verwenden soll:
Dns.GetHostEntry(Dns.GetHostName());
Das gefällt mir überhaupt nicht, weil damit einfach alle Adressen, die Ihrem Computer zugewiesen sind, abgerufen werden. Wenn Sie mehrere Netzwerkschnittstellen haben (was heutzutage bei so gut wie allen Computern der Fall ist), haben Sie keine Ahnung, welche Adresse zu welcher Netzwerkschnittstelle gehört. Nachdem ich einige Nachforschungen angestellt habe, habe ich eine Funktion erstellt, die die NetworkInterface-Klasse verwendet und die Informationen aus ihr herausholt. Auf diese Weise kann ich feststellen, um welche Art von Schnittstelle es sich handelt (Ethernet, Wireless, Loopback, Tunnel usw.), ob sie aktiv ist oder nicht, und SOOO viel mehr.
public string GetLocalIPv4(NetworkInterfaceType _type)
{
string output = "";
foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
{
foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
output = ip.Address.ToString();
}
}
}
}
return output;
}
Um die IPv4-Adresse Ihrer Ethernet-Netzwerkschnittstelle zu erhalten, rufen Sie jetzt auf:
GetLocalIPv4(NetworkInterfaceType.Ethernet);
Oder Ihre Wireless-Schnittstelle:
GetLocalIPv4(NetworkInterfaceType.Wireless80211);
Wenn Sie versuchen, eine IPv4-Adresse für eine drahtlose Schnittstelle zu erhalten, Ihr Computer aber keine drahtlose Karte installiert hat, wird nur eine leere Zeichenfolge zurückgegeben. Dasselbe gilt für die Ethernet-Schnittstelle.
Hoffentlich hilft das jemandem! :-)
EDITです。
Es wurde darauf hingewiesen (danke @NasBanov), dass diese Funktion zwar die IP-Adresse viel besser extrahiert als die Funktion Dns.GetHostEntry(Dns.GetHostName())
Es unterstützt nicht sehr gut mehrere Schnittstellen desselben Typs oder mehrere IP-Adressen auf einer einzigen Schnittstelle. Es gibt nur eine einzige IP-Adresse zurück, wenn möglicherweise mehrere Adressen zugewiesen sind. Um ALLE diese zugewiesenen Adressen zurückzugeben, könnten Sie die ursprüngliche Funktion einfach so manipulieren, dass sie immer ein Array anstelle eines einzelnen Strings zurückgibt. Zum Beispiel:
public static string[] GetAllLocalIPv4(NetworkInterfaceType _type)
{
List<string> ipAddrList = new List<string>();
foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
{
foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
ipAddrList.Add(ip.Address.ToString());
}
}
}
}
return ipAddrList.ToArray();
}
Diese Funktion gibt nun ALLE zugewiesenen Adressen für einen bestimmten Schnittstellentyp zurück. Um nur eine einzige Zeichenkette zu erhalten, können Sie die Funktion .FirstOrDefault()
Erweiterung, um das erste Element im Array zurückzugeben oder, falls es leer ist, eine leere Zeichenkette zurückzugeben.
GetLocalIPv4(NetworkInterfaceType.Ethernet).FirstOrDefault();