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,"");
}
}
?>