Ich weiß, dass dies ein totes Pferd treten kann, aber vielleicht kann dies jemandem helfen. Ich habe überall nach einer Möglichkeit gesucht, meine lokale IP-Adresse zu finden, aber überall, wo ich sie finde, heißt es:
Dns.GetHostEntry(Dns.GetHostName());
Ich mag das überhaupt nicht, weil es nur alle Adressen erhält, die Ihrem Computer zugewiesen sind. Wenn Sie mehrere Netzwerkschnittstellen haben (was heutzutage so gut wie alle Computer tun), wissen Sie nicht, welche Adresse zu welcher Netzwerkschnittstelle gehört. Nachdem ich einige Nachforschungen angestellt hatte, erstellte ich eine Funktion zur Verwendung der NetworkInterface-Klasse und riss die Informationen heraus. 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;
}
So rufen Sie jetzt die IPv4-Adresse Ihres Ethernet-Netzwerkschnittstellenaufrufs ab:
GetLocalIPv4(NetworkInterfaceType.Ethernet);
Oder Ihre drahtlose Schnittstelle:
GetLocalIPv4(NetworkInterfaceType.Wireless80211);
Wenn Sie versuchen, eine IPv4-Adresse für eine drahtlose Schnittstelle abzurufen, auf Ihrem Computer jedoch keine drahtlose Karte installiert ist, wird nur eine leere Zeichenfolge zurückgegeben. Gleiches gilt für die Ethernet-Schnittstelle.
Hoffe das hilft jemandem! :-)
BEARBEITEN:
Es wurde darauf hingewiesen (danke @NasBanov), dass diese Funktion zwar das Extrahieren der IP-Adresse auf viel bessere Weise als die Verwendung ermöglicht Dns.GetHostEntry(Dns.GetHostName())
, jedoch nicht sehr gut mehrere Schnittstellen desselben Typs oder mehrere IP-Adressen auf einer einzigen Schnittstelle unterstützt . Es wird nur eine einzige IP-Adresse zurückgegeben, wenn möglicherweise mehrere Adressen zugewiesen sind. Um ALLE diese zugewiesenen Adressen zurückzugeben, können Sie einfach die ursprüngliche Funktion manipulieren, um immer ein Array anstelle einer einzelnen Zeichenfolge zurückzugeben. 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 einzelne Zeichenfolge zu erhalten, können Sie die .FirstOrDefault()
Erweiterung verwenden, um das erste Element im Array zurückzugeben, oder, wenn es leer ist, eine leere Zeichenfolge zurückgeben.
GetLocalIPv4(NetworkInterfaceType.Ethernet).FirstOrDefault();
If I am not connected to a network and I am connected to the internet
Diese Aussage scheint widersprüchlich. Versuchen Sie herauszufinden, ob Ihr Computer mit einem privaten LAN oder dem Internet verbunden ist?