BigBasti's Blog About Me & my Digital Lifestyle

23Apr/094

VB.NET: Lokale IP Adresse mit WMI bestimmen

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 Eigenschaft "IPEnabled" 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!

   
Get Adobe Flash playerPlugin by wpburn.com wordpress themes