PHP-Code:
<?php
function readxml()
{
$sqlserver=getvalue(59311);
$user=getvalue(41755);
$password=getvalue(17356);
$database=getvalue(33225);
/*letzten Scan einlesen*/
$path = "scanner.xml";
$xmlfile = file_get_contents($path);
$new = simplexml_load_string($xmlfile);
$con = json_encode($new);
$newArr = json_decode($con, true);
$lastscan=array();
$devicelist=array();
$iptemp="";
foreach ($newArr["host"] as $hostlist)
{
if ($hostlist["status"]["@attributes"]["state"] == "up")
{
if (isset($hostlist["address"][1]["@attributes"]["addr"]))
{
$mac=$hostlist["address"][1]["@attributes"]["addr"]; /*localhost liefert keine mac*/
}
else
{
$mac=$hostlist["status"]["@attributes"]["reason"]; /*localhost*/
}
$lastscan[$mac]=$mac;
$lastscan[$mac]=array();
$lastscan[$mac]["mac"]=$mac;
/*localhost sieht anders aus*/
if (isset ($hostlist["address"][0]["@attributes"]["addr"]))
{
$lastscan[$mac]["ip"]=$hostlist["address"][0]["@attributes"]["addr"];
}
else
{
$lastscan[$mac]["ip"]=$hostlist["address"]["@attributes"]["addr"];
}
$lastscan[$mac]["status"]=$hostlist["status"]["@attributes"]["state"];
if (isset($hostlist["address"][1]["@attributes"]["vendor"])){
$lastscan[$mac]["vendor"]=$hostlist["address"][1]["@attributes"]["vendor"];
}
else
{
$lastscan[$mac]["vendor"]="";
}
}
}
$dbhandler=mysqli_connect($sqlserver,$user,$password,$database);
/*alle auf down setzen und downcounter um eins erhöhen*/
$allhosts = mysqli_query($dbhandler,"select mac,downcounter,important from hosts");
while($row = mysqli_fetch_object($allhosts))
{
$downcounter=$row->downcounter; /*Anzahl durchläufe down*/
$downcounter++;
mysqli_query($dbhandler,"update hosts set downcounter='".$downcounter."',up=0 where mac='".$row->mac."'");
}
foreach ($lastscan as $host)
{
$check=mysqli_query($dbhandler,"select mac from hosts where mac='".$host["mac"]."'");
$exist=($check->num_rows >0?true:false);
if ($exist)
{
/*Datensatz vorhanden ändern*/
$iptemp=$host["ip"];
$iparray=explode(".",$iptemp);
$iptemp=str_pad($iparray[0],3,"0",STR_PAD_LEFT).".".
str_pad($iparray[1],3,"0",STR_PAD_LEFT).".".
str_pad($iparray[2],3,"0",STR_PAD_LEFT).".".
str_pad($iparray[3],3,"0",STR_PAD_LEFT);
$test=str_pad($iparray[3],3,"0",STR_PAD_LEFT);
mysqli_query($dbhandler,"update hosts set ip='".$iptemp."',up=1 where mac='".$host["mac"]."'"); /*eventuell IP ändern und status auf up*/
$data=mysqli_query($dbhandler,"select important,notify,name from hosts where mac='".$host["mac"]."'");
$value=mysqli_fetch_object($data);
$important=($value->important==1?true:false); /*ob wichtig*/
$notify=($value->notify==1?true:false); /*ob meldung verschickt*/
$name=$value->name; /*Name holen*/
if ($notify)
{
Telegram_SendTextToAll(58283,$name. " antwortet wieder!");
mysqli_query($dbhandler,"update hosts set notify=0 where mac='".$host["mac"]."'"); /*Benachrichtigung zurücksetzen*/
}
mysqli_query($dbhandler,"update hosts set downcounter='0',lastup='".date("Y-m-d H:i:s",time())."' where mac='".$host["mac"]."'");
}
else
{
mysqli_query($dbhandler,
"insert into hosts (mac,ip,name,important,firstseen,lastup,up,notify,vendor) values ('".
$host["mac"]."','".
$host["ip"]."','".
$host["vendor"]."','".
"0"."','".
date("Y-m-d H:i:s",time())."','".
date("Y-m-d H:i:s",time())."','".
"1"."','".
"0"."','".
$host["vendor"]."')");
Telegram_SendTextToAll(58283,"Neues Gerät gefunden: ".$host["mac"]." ".$host["ip"]." ".$host["vendor"]);
}
}
$allhosts = mysqli_query($dbhandler,"select mac,downcounter,important,notify,name from hosts where up='0' and important='1' and notify='0' and downcounter='3'");
while($row = mysqli_fetch_object($allhosts))/*Benachrichtigung der important devices*/
{
$name=$row->name; /*Name holen*/
mysqli_query($dbhandler,"update hosts set notify='1' where mac='".$row->mac."'");
Telegram_SendTextToAll(58283,$name. " antwortet nicht!"); /*Meldung Device ist nicht erreichbar*/
}
mysqli_close($dbhandler);
}
function generatetable()
{
$sort="";
switch(getvalue(34021)){
case 1: $sort="mac";break;
case 2: $sort="ip";break;
case 3: $sort="name";break;
case 4: $sort="important";break;
case 5: $sort="firstseen";break;
case 6: $sort="lastup";break;
case 7: $sort="up";break;
case 8: $sort="vendor";break;
default:$sort="ip";
}
$ascdsc="";
switch(getvalue(40698)){
case 1: $ascdsc="ASC";break;
case 2: $ascdsc="DESC";break;
default:$ascdsc="ASC";
}
$where="";
switch(getvalue(14624)){
case 1: $where="";break;
case 2: $where="where important=1";break;
case 3: $where="where important=0";break;
case 4: $where="where up=1";break;
case 5: $where="where up=0";break;
default:$where="";
}
/*suche IP*/
$sucheip=getvalue(47245);
if ($sucheip<>"" ){
if($where==""){
$where="where ip like '%".$sucheip."%'";
}
else
{
$where=$where." or ip like '%".$sucheip."%'";
}
setvalue(47245,"");
}
/*suche MAC*/
$suchemac=getvalue(54294);
if ($suchemac<>"" ){
if($where==""){
$where="where mac like '%".$suchemac."%'";
}
else
{
$where=$where." or mac like '%".$suchemac."%'";
}
setvalue(54294,"");
}
/*suche Name*/
$suchename=getvalue(28483);
if ($suchename<>"" ){
if($where==""){
$where="where name like '%".$suchename."%'";
}
else
{
$where=$where." or name like '%".$suchename."%'";
}
setvalue(28483,"");
}
$Zeile=1;
$sqlserver=getvalue(59311);
$user=getvalue(41755);
$password=getvalue(17356);
$database=getvalue(33225);
$dbhandler=mysqli_connect($sqlserver,$user,$password,$database);
$allhosts = mysqli_query($dbhandler,"select * from hosts ".$where." order by ".$sort." ".$ascdsc);
$Liste_HTML = "";
$Liste_HTML = $Liste_HTML."<table border=\"1\" style=\"width:100%\">";
$Liste_HTML = $Liste_HTML."<tr>";
$Liste_HTML = $Liste_HTML."<th><center>Zeile</center></th><th><center>IP</center></th><th><center>MAC</center></th><th><center>Gerät</center></th><th><center>Hersteller</center></th><th><center>Erkannt</center></th><th><center>zul. Online</center></th><th><center>Ping</center></th><th><center>Status</center></th>";
$Liste_HTML = $Liste_HTML."</tr>";
while($row = mysqli_fetch_object($allhosts))
{
switch ($row->up){
case 1: $Farbe="green"; $Text="Ok";
break;
case 0: $Farbe="red"; $Text="Fehler";
break;
}
if ($row->important == 1) {
$FarbeWichtig="blue";
}
else
{
$FarbeWichtig="";
}
$Liste_HTML = $Liste_HTML."<tr>";
$Liste_HTML = $Liste_HTML. "<td style=\"background-color:".$FarbeWichtig."\">".$Zeile."</td>
<td style=\"background-color:".$FarbeWichtig."\">".$row->ip."</td>
<td style=\"background-color:".$FarbeWichtig."\">".$row->mac."</td>
<td style=\"background-color:".$FarbeWichtig."\">".$row->name."</td>
<td style=\"background-color:".$FarbeWichtig."\">".$row->vendor."</td>
<td style=\"background-color:".$FarbeWichtig."\"><center>".$row->firstseen."</center></td>
<td style=\"background-color:".$FarbeWichtig."\"><center>".$row->lastup."</center></td>
<td style=\"background-color:".$Farbe."\"><center>".$Text."</center></td>";
if ($row->up == 0)
{
if ($row->downcounter==1){$Text="HBL"; $Farbe="blue";}/*Heartbeat lost - noch kein Problem*/
if ($row->downcounter==2){$Text="CL";$Farbe="orange";}/*noch immer keine Verbindung - keine Panik*/
if ($row->downcounter>2){$Text="DWN<br>".$row->downcounter;$Farbe="red";}/*nach 90 Sekunden ist das Ding Down*/
}
else
{
$Text="UP";
$Farbe="green";
}
$Liste_HTML = $Liste_HTML."<td style=\"background-color:".$Farbe."\"><center>".$Text."</center></td>";
$Zeile++;
}
$Liste_HTML = $Liste_HTML."</table>";
setvalue(13373/*Netzwerkstatus HTML Variable*/,$Liste_HTML);
mysqli_close($dbhandler);
}
Das Skript, das vom WebHook aufgerufen wird