WSH: MAC- und IP-Adressen

Für die Administration ist es immer wichtig, einen Überblick darüber zu haben, welche DHCP-Leases vergeben wurden, welche reserviert sind und welche Systeme ganz generell mit welchen IP- und MAC-Adressen konfiguriert sind. Mögliche Lösungsansätze werden im vorliegenden Beitrag vorgestellt.

Ein Leser von Expert’s sinside Windows NT/2000 hat im Zusammenhang mit den Artikel zur Entwicklung administrativer Anwendungen über den WSH (Windows Scripting Host) unter Verwendung von VBScript gefragt, wie man am einfachsten eine Liste der über einen DHCP-Server vergebenen Leases, inklusive einer Zuordnung von MAC-Adressen, erhalten kann. Wie so oft ist die Antwort auf diese Frage nicht ganz so einfach. In diesem Artikel stellen wir verschiedene Lösungsansätze kurz vor, die teilweise in einem weiteren Artikel mit Codebeispielen näher erläutert werden.

Bei den Lösungsansätzen kann man unterscheiden zwischen client- und server-orientierten Lösungen. Wenn es darum geht zu ermitteln, wie ein definierter DHCP-Server konfiguriert ist, bietet sich natürlich zunächst die grafische Oberfläche an. Über sie kann man beispielsweise den Export von Listen mit Leases in Textdateien durchführen. In den meisten Fällen dürfte das auch der einfachste Lösungsansatz sein (Bild 1). Die so erzeugten Listen können mit Skripts weiter verarbeitet werden. Der Nachteil dieser Vorgehensweise ist, dass der Vorgang für jeden Bereich sowohl für die Leases als auch die Reservierungen durchgeführt werden muss. Das ist bei mehreren Bereichen relativ aufwändig. Dafür muss man aber, soweit man die erstellten Dateien nicht in spezieller Weise weiterverarbeiten möchte, nichts programmieren.

Bild 1: Über den Befehl Liste exportieren können einfach Listen mit den aktuell vergebenen IP-Adressen und Reservierungen eines DHCP-Servers erzeugt werden.
Bild 1: Über den Befehl Liste exportieren können einfach Listen mit den aktuell vergebenen IP-Adressen und Reservierungen eines DHCP-Servers erzeugt werden.

Da in den Listen aber keine MAC-Adressen erhalten sind, könnte man die erzeugten Exportdateien beispielsweise als Eingabe für ein Skript verwenden, mit dem anschließend systematisch die MAC-Adressen ermittelt werden. Ein solches Skript müsste die verschiedenen Systeme kontaktieren und über WMI die einer IP-Adresse zugeordneten MAC-Adresse ermitteln. Das Ergebnis könnte – mit Hinweisen auf Systeme, die nicht verfügbar waren – wiederum in eine Datei geschrieben werden.

Ein anderer Ansatz wäre die Verwendung eines Skripts, das systematisch entweder eine Liste definierter Clients oder einen Bereich von IPAdressen verarbeitet, die Verbindung zu den Systemen herstellt und die Konfigurationsinformationen für DHCP ausliest. Damit könnte ermittelt werden, welches System eine DHCP-Lease hat, wie deren Status ist und so weiter.

Stattdessen könnte man ein solches Skript auch lokal beim Systemstart ausführen und das Ergebnis an eine zentrale Datenbank liefern.

In beiden Fällen wird mit WMI gearbeitet, wobei in diesem Fall etwas mehr Optionen als beim erst genannten Ansatz genutzt würden.

Wesentlich weiter ginge die Nutzung der DHCP Server-API, die von Microsoft definiert wurde. Über diese API können auch komplexere Aktivitäten entwickelt werden. Der Nachteil ist, dass es sich um eine C/C++-API handelt, die für diese Aufgabenstellung zu komplex ist.

Wie geht es weiter?

Schließlich kommt auch noch NetSH in Frage. Mit netsh dhcp lassen sich viele administrative Aufgaben adressieren – aber keine sauber strukturierten Listen der aktuell vergebenen DHCPLeases ausgeben. Die Möglichkeiten und Grenzen von netsh werden im folgenden Teil, der sich auf Codebeispiele für die erstgenannten Lösungsansätze konzentriert, noch näher erläutert.