Windows DHCP-Server: IP-Adressen aller Netzwerkgeräte anzeigen

Hallo,

da ich bei meinem W2kR2 den DHCP nutze, wollte ich alle meine Gerätschaften auf einen Blick im IPS haben. (Hatte das auch schon für die Fritzbox gemacht, nur da sind die Angaben nicht immer ganz richtig, d.h. aktuell gewesen - warum auch immer.) Somit habe ich die IP-Adressen, MAC-Adressen und den angegeben Hostname zur Hand und kann diese dann in IPS weiterbenutzen, z.B. um den Status des Fernsehers oder den Tonerstand des Druckers zu bestimmen. Die Geräte arbeiten alle im DHCP-Modus (sofern es am Client denn geht) und sind per Reservierung einer „festen“ IP-Adresse zugeordnet bzw. andersherum. Somit kann ich die Änderung des Gateways oder DNS auf einen Rutsch zentral machen und muss nicht jedes Gerät einzeln anfassen.

Einrichtung:

  • [li]auf dem DHCP-Server die Datei dhcp-leases.bat (Scope und Dateiname natürlich entsprechend der Umgebung anpassen) ausführen
    [/li][li]evtl. in die Aufgabenplanung einbinden
    [/li][li]dadurch wird die Datei dhcp-leases.txt erstellt
    [/li][li]eine String-Variable anlegen
    [/li][li]den vollen Pfad in diese Variable schreiben (C:\IP-Symcon\dhcp-leases.txt)
    [/li][li]Script anlegen und Inhalt hineinkopieren (ID der String-Variable anpassen!)
    [/li][li]eine String-Variable mit html-Profil anlegen (ID der String-Variable anpassen!)
    [/li][li]HTML-Variable im Webfront anzeigen
    [/li][li]Script ausführen
    [/li]

Batchdatei (z.B. dhcp-leases.bat)

netsh dhcp server scope 192.168.99.0 show clients 1 > "C:\IP-Symcon\dhcp-leases.txt"
<?
// Das Script ermittelt die Netzwerkgeräte eines Windows DHCP-Servers
// Dazu vorher folgenden Befehl auf der Konsole (CMD) ausführen (manuell oder zyklisch per Aufgabenplanung):

// netsh dhcp server scope 192.168.99.0 show clients 1 > "C:\IP-Symcon\dhcp-leases.txt"

// Scope und Dateiname natürlich entsprechend der Umgebung anpassen
// Hier hat die Variable 24736 den Wert C:\IP-Symcon\dhcp-leases.txt


// IPS-Variablen zuweisen
$id_dateiname					= 24736 /*[EDV\DHCP\Filename]*/;
$id_html = 33889 /*[EDV\DHCP\html]*/;

// Statusfile lesen
$datei = GetValue($id_dateiname);
$zeilen = file ($datei);

// zum Debuggen:
// print_r($zeilen);

$devices = array();
for ($i=8; $i < count($zeilen) - 4; $i++) // die ersten 8 sowie die letzten 4 Zeilen sind nutzlos
	{
	// unsortierte Angaben auswertbar machen
	// gleich ein explode mit "-" geht wegen evtl. vorhandener Bindestriche im Namen des Gerätes nicht
	
	$zeilen[$i] = str_replace("- ", ";", $zeilen[$i]);
	// zum Debuggen:
	//	echo $zeilen[$i]."
";

	$zeilen[$i] = str_replace("  -", ";", $zeilen[$i]);
   // zum Debuggen:
	//	echo $zeilen[$i]."
";

	$datensatz = explode(";", $zeilen[$i]);
   array_push($devices, $datensatz);
   }

// zum Debuggen:
// print_r($devices);

// Ausgaben erstellen
$html = "<table width='90%' align='left'>"; // Farbe anpassen oder style entfernen
$html .= "<tr><td><b>Status</b></td><td><b>IP-Adresse</b></td><td><b>MAC-Adresse</b></td><td><b>Gerätename</b></td></tr>";

foreach ($devices as $device)
	{
	// Status festellen
	$status = "";
	if (Sys_Ping(trim($device[0]), 1000))
	   {
	   $status = "erreichbar";
	   }
	   else
	   {
	   $status = "nicht erreichbar";
		}
	
	// Textausgabe in der Konsole
	echo "Status: " . $status;
   echo "
";
	echo "IP: " . trim($device[0]);
   echo "
";
	echo "MAC: " . trim($device[2]);
   echo "
";
	echo "Name: " . trim($device[5]);
	echo "

";
	
	// HTML-Ausgabe in Variable zur Anzeige im Webfront
	$html .= "<tr>";
	$html .= "<td>" . $status . "</td>";		// Status
	$html .= "<td>" . trim($device[0]) . "</td>";		// IP-Adresse
	$html .= "<td>" . trim($device[2]) . "</td>";		// MAC-Adresse
	$html .= "<td>" . trim($device[5]) . "</td>";		// Gerätename
	$html .= "</tr>";
	}
	
$html .= "</table>";
// html in Variable speichern
SetValue($id_html ,$html);

?>