Netzwerk-Scanner

Moin,

hab mir für mein WLAN Netz mal einen Netzwerk-Scanner gebastelt, der das Netzwerk nach aktiven IP Adressen durchsucht und selbige mit aufglöstem Host-Namen in eine String-Variable speichert.

Ausserdem wird die Anzahl der aktiven IP Adressen ermittelt.
Achtung: Skriptlaufzeit bei vollem Scan von 255 Adressen sehr lange!

Da ich nicht der absolute PHP-Könner bin bitte mitm Feedback gnädig sein :o

<?
/////////////////////////(C) by MD 2009 //////////////////////////
//                                                              //
//     Skript scannt einen bestimmten Netzwerk-Bereich          //
//      und legt bei Antwort die IP Addresse und den            //
//          Hostnamen in einer String Variable ab               //
//                                                              //
//            Trigger z.B. alle 10 min erzeugen                 //
//                 (tested with IPS v2.1)                       //
//                                                              //
//////////////////////////////////////////////////////////////////


// Ausführungszeit maximal 180 sec

set_time_limit(180);

// statischer Teil

// $ID = Netzwerk-Teiladresse z.B. 192.168.1.
// $start = erste zu scannende IP Adresse
// $end = letzte zu scannende IP Adresse
// $ParentID = Kategorie ID für String Variablen
// $Anz = Anzahl der zu erstellenden Stringvariablen
//        (sind mehr IP Adressen vorhanden als String Variablen, so werden
//        die IP Adressen für die keine String Variablen vorhanden sind, nicht
//        gespeichert)
// $debug = Debugausgabe

$ID = "172.20.80.";
$start = 1; 
$end = 254;
$ParentID = 38546; 
$Anz = 20;
$debug = false;

// dynamischer Teil

// String-Variablen erstellen

$IP1 = @IPS_GetVariableIDByName("IP1", $ParentID);

if (IPS_VariableExists($IP1) == false)
	{
	for($i=1; $i <= $Anz; $i++)
	   {
	   $var = IPS_CreateVariable(3);
		IPS_SetParent($var, $ParentID);
 	 	IPS_SetName($var,"IP$i");
 	 	}
   $var = IPS_CreateVariable(1);
	IPS_SetParent($var, $ParentID);
 	IPS_SetName($var,"Anzahl_aktiv");
 	
 	IPS_Sleep(2500);
   }

// Netzwerkscan

$Anzahl = 0;

for($i=$start; $i <= $end; $i++) // von - bis zu scannende Adressen
	{
	$adr = $ID.$i;
	$ping = Sys_Ping("$adr",100);
	if ($ping == true)
		{
		$host = gethostbyaddr($adr);
		if ($debug) {echo "IP: $adr -- Hostname: $host 
";}
		$Anzahl = $Anzahl + 1;
		if ($Anzahl <= $Anz)
			{
			$VarID = IPS_GetVariableIDByName("IP$Anzahl",$ParentID);
			setValueString($VarID,"IP Adresse: $adr -- Hostname: $host");
			}
		}
		else
		{
		if ($debug) {echo "IP: $adr --> nicht erreichbar 
";}
		}
	}

if ($debug) {echo "Anzahl aktiver Netzwerkgeräte: $Anzahl 
";}
$VarID = IPS_GetVariableIDByName("Anzahl_aktiv",$ParentID);
setValueInteger($VarID,$Anzahl);

// restliche Strings wieder löschen

if ($Anzahl < $Anz)
	{
	for($i=$Anzahl+1; $i<=$Anz; $i++)
		{
		$VarID = IPS_GetVariableIDByName("IP$i",$ParentID);
		setValueString($VarID,"");
		}
	}


?>