Abfrage der Lokalen IP-Adresse
Ich das Bedürfnis, zu wissen, meine tatsächliche lokale IP-Adresse (also nicht die loopback-Adresse) von einem Windows 8 WinRT/Metro app. Es gibt mehrere Gründe, die ich hier brauchen. Die einfachste ist, dass in der Benutzeroberfläche der app, die ich zeigen möchte, Sie text wie "Ihre lokalen Netzwerk-IP-Adresse: [IP-abgefragt-code]".
Nutzen wir auch die Adresse für einige zusätzliche Netzwerk-Kommunikation. Diejenigen, die comms sind vollkommen gültig, weil es funktioniert alles, wenn ich Blick auf die IP-Adresse in die Systemsteuerung, dann hart-code in der app. Um dem Benutzer in einen dialog zu gehen, Blick auf die Adresse und manuell eingeben, es ist etwas, was ich wirklich, wirklich wollen, zu vermeiden.
Ich würde denken, es wäre nicht eine komplexe Aufgabe, um die Adresse zu bekommen programmatisch, sondern meine Suchmaschine und StackOverflow-Fähigkeiten sind wieder leer.
An diesem Punkt fange ich an, berücksichtigen Sie dabei ein UDP-broadcast - /Hör-Schleife zu hören, meinen eigenen Wunsch, und extrahieren Sie die Adresse aus, aber das scheint wirklich eine hackey Schlamassel. Gibt es eine API, irgendwo in der neuen WinRT-Sachen, das wird mich dort?
Beachten Sie, dass ich sagte: "WinRT-app. Das bedeutet, dass die typischen Mechanismen wie Dns.GetHostEntry
oder NetworkInterface.GetAllInterfaces()
sind nicht zur Arbeit zu gehen.
- Windows erkennt nur die Schnittstellen, wenn jemand weist Sie eine lokale Netzwerk-ip-Adresse an ein Netzwerkgerät, das ist die Adresse ( es gilt perfekt ). Was genau versuchen Sie zu tun mit der ip-Adresse? Sie sind kaum in der Lage sein zu tun, einen UDP-broadcast/hören auf nichts, aber die ip-Adresse der Schnittstelle kennt, der in den meisten Fällen ist eine lokale Netzwerk-Adresse, die nicht gültig außerhalb der besagten Netzwerk.
- Werfen Sie einen Blick auf msdn.microsoft.com/en-us/library/windows/apps/...
- nicht sicher, was ich betrachten sollten - und diese Dokumentation nicht Feld mit dem Verhalten sehe ich das mit der Consumer Preview und VS11 Beta. Zum Beispiel die docs zeigen
NetworkIntrface.GetAllNetworkInterfaces()
funktionieren sollte, aber es existiert nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach viel Graben, fand ich die Informationen, die Sie benötigen, mit NetworkInformation und HostName.
NetworkInformation.GetInternetConnectionProfile ruft der Verbindungs-Profils im Zusammenhang mit der internet-Verbindung, der aktuell von der lokalen Maschine.
NetworkInformation.GetHostNames ruft eine Liste von host-Namen. Es ist nicht offensichtlich, aber dies beinhaltet die IPv4-und IPv6-Adressen als strings.
Mithilfe dieser Informationen können wir die IP-Adresse des Netzwerkadapters, der mit dem internet verbunden wie diese:
Beachten Sie, dass HostName hat Eigenschaften, CanonicalName, DisplayName und RawName, aber Sie alle scheinen dieselbe Zeichenfolge zurück.
Können wir uns auch Adressen für mehrere Adapter mit code wie diesem:
hn.NetworkAdapter
wurde ersetzt mithn.IPInformation.NetworkAdapter
im Finale version desWindows.Networking.Connectivity.NetworkInformation
Klasse. Die überarbeitete version dervar hostname
Zeile sollte so Aussehen wievar hostname = NetworkInformation.GetHostNames().SingleOrDefault(hn => hn.IPInformation != null && hn.IPInformation.NetworkAdapter != null && hn.IPInformation.NetworkAdapter.NetworkAdapterId == icp.NetworkAdapter.NetworkAdapterId);
.Über die akzeptierten Antworten, Sie brauchen nur dieses:
Können Sie die lokale IP-Adresse auf diese Weise:
Namespaces verwendet: