BigBastis Blog

VB.NET: Lokale IP Adresse mit WMI bestimmen

Introduction

user

Sebastian Gross

Sebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.


LATEST POSTS

Handling too long scrollspy menus 10th June, 2015

Java: Create ZIP archive 23rd March, 2015

.NET

VB.NET: Lokale IP Adresse mit WMI bestimmen

Posted on .

Heute möchte ich euch zeigen, wie ihr mithilfe der WMI eure lokale IP Adresse bestimmen könnt. Diese Funktion fehlt leider noch in dem Aktuellem Framework. (Zum Thema WMI werde ich noch detailiertere Artikel schreiben!)

Fangen wir an. Das das nur ein kleines Demoprojekt ist, erstellen wir ein gewöhnliches Windows Forms Projekt. Die leere Form die es und gleich liefert ist auch schon alles was wir brauchen! Doppelklicken wir auf die Form um zum Code zu gelangen!

Ich möchte erstmal etwas über die WMI (Windows Management Instrumentation) sagen. Die WMI ist soetwas wie ein große Datenbank von allen Geräten, die in einem Computer verbaut sind, inklusive aller Infos wie Hersteller, Ports etc. Aber nicht nur das, man kann über die WMI soziemlich alle Einstellungen des Computers ändern! Also vorsicht dort kann man ziemlich viel Mist bauen!

Aber zurück zur Lokalen IP. Wie sovieles ist die Lokale IP auch in der WMI gespeichert, diese kann man auslesen, oder auch neu einstellen (was uns jetzt aber nicht interessiert!). Aber wo ist sie?

Ich frage mal anders, wenn ihr eure Lokale IP wissen wollt, wo steht diese? Entweder in den Netzwerk Einstellungen in der jeweiligen Netzwerkkarte, oder ihr ruft über Start->Ausführen „cmd“ auf unt tippt „ipconfig“ ein. Hier seht ihr eure aktiven Netzwerkkarten samt den IPs!
Und genauso ist es in der WMI! Die IP Adresse befindet sich logischerweise in den Infos der Netzwerkkarte zu der diese gehört! Also muss man nur die aktive Netzwerkkarte (man könnte ja meherere haben WLAN, LAN, MODEM…) heraussuchen und nachschauen welche IP dort hinterlegt ist.
Imports System.Management

Public Class Form1

Function ShowIP() As String
        Dim query As _
	ManagementObjectSearcher = New ManagementObjectSearcher_
	("SELECT * FROM Win32_NetworkAdapterConfiguration_
	 WHERE IPEnabled = True")

        Dim queryCollection As ManagementObjectCollection = query.Get()

        Dim IPAdress(1) As String

        For Each mo As ManagementObject In queryCollection
            IPAdress = mo.GetPropertyValue("IPAddress")

	    MessageBox.Show(IPAdress(0))
        Next

    End Function

End Class

So sieht unsere Funktion aus! Diese Funktion muss nurnoch im Form1_Load Ereignis aufgerufen werden. Überschaubar oder? Und auch überhaupt nicht kompliziert 🙂 Wie man sieht kann man die WMI ähnlich wie eine SQL Datenbank ansteuern. Man erstellt einen query vom Typ ManagementObjectSearcher dem man über seinen Konstruktor den SQL-Query zuweist! In diesem Fall möchten wir die Win32_NetworkAdapterConfiguration durchsuchen, macht ja auch Sinn wenn man die IP haben möchte oder? Undzwar picken wir uns nur die Netzwerkkarten raus, die auch aktiv sind und somit auch eine IP zugewiesen bekommen haben. Das sind nämlich die, die die EigenschaftIPEnabled“ aktiviert haben!

Da wir als Antwort auf diesen Query mehr als nur einen Eintrag bekommen könnten müssen wir für das Ergebnis eine Collection anlegen. In diesem Fall eine ManagementObjectCollection. Diese Collection kann alle Management Objekte Speichern! Dieser weisen wir unseren Such-Query zu.

Die IP Adresse ist in jedem Netzwerkadapter in einem Ein-Dimensionalen Array gespeichert, weswegen wir eine entsprechende Variable anlegen, hier „IPAdress„!

Nun sprechen wir jede Netzwerkkarte an, die wir in unserer queryCollection haben und fragen deren IP Adresse ab. Diese Eigenschaft heißt, Übberraschug, „IPAdress„. Das ManagementObject bietet und glücklicherweise die Funktion „GetPropertyValue“ mit der wir jede Eigenschaft auslesen können, mit deren Hilfe können wir den IPAdress Array aus der WMI in unsere IPAdress Variable kopieren.

In diesem Array befindet sich die IPAdresse in dem ersten Feld. Dieses geben wir über die MessageBox aus!

Das wars auch schon nun kennen wir die lokalen IP Adressen von allen aktiven Netzwerkkarten! Zu dem Thema WMI werde ich noch öfter schreiben, unter anderem wie man in die WMI gelangt und sich mal umschauen kann und wie man die gespeicherten Informationen manipulieren kann!

profile

Sebastian Gross

http://www.bigbasti.com

Sebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.

Comments
user

Author Bulli

Posted at 20:09 9. Februar 2010.

klasse Beschreibung !!! Danke schön. Ist sie Ausgabe von alternativen IP-Adressen des LAN-Adapters auch möglich ?
Gruß
Bulli

user

Author admin

Posted at 21:56 9. Februar 2010.

Hallo Bulli, was genau meinst du mit Alternativen Adressen?

user

Author Bulli

Posted at 19:41 12. Februar 2010.

Einer LAN-Schnittstelle kann ich unter der erweiterten TCP/IP-Einstellungen weitere IP-Adressen hinzufügen.

user

Author admin

Posted at 22:26 21. März 2010.

Hallo Bulli, habe das hier irgendwie aus den Augen verloren. Wir lesen in diesem Beispiel ja einen IPAdress Array aus. unter Umständen können in diesem Array ja auch die anderen Adressen stehen, die du suchst. Wie gesagt ist das nur eine Vermutung, da ich noch nicht mit alternativen IP Adressen zu tun hatte!

Kommentar verfassen

View Comments (4) ...
Navigation