Ein Netzwerkmonitor mit PHP

Programmierung der FHZ-Zentralen mit contronics homeputer Standard / homeputer Studio & WEB-Server

Moderator: Co-Administratoren

Benutzeravatar
squeeezer
Beiträge: 545
Registriert: 17.07.2006, 00:00
Wohnort: Idstein

Ein Netzwerkmonitor mit PHP

Beitrag von squeeezer » 15.02.2008, 13:17

gude ...

auf vielfachen wunsch möchte ich hier gerne eine möglichkeit vorstellen, wie man seine netzwerkkomponenten (wie router, server, usw.) mittels homeputer studio überwachen kann und im fehlerfalle natürlich auch diverse aktionen auslösen kann.

für die rubrik "netzwerk" habe ich bei mir eine eigene visualisierung erstellt, die so aussieht:

Bild

hierbei sind die netzwerkzustände (grün, gelb, rot; hier sieht man leider nur grüne, da alles in ordnung ist) jeweils virtuelle objekte, die die zustände "ok", "warnung" oder "fehler" mit entsprechenden icons annehmen können.

im folgenden code-beispiel dreht es sich um das objekt "OBJNetStatObiwan". Obiwan ist ein Server, der die Rollen "Web- und Mail-Server" besitzt. Weiterhin gibt es ein Textobjekt "LOGNetzwerkStatus", wo statusmeldungen nochmal im klartext beinhaltet sind.

das folgende makro "MAKRONetzwerkMonitor1" beinhaltet den code. in diesem makro werden 2 variablen benutzt: errcnt (typ zahl) und prot (typ zeichen). in der variable errcnt wird ein fehler hochgezählt, die die anzahl der "gestörten" protokolle definiert. in der variablen "prot" stehen dann die protokolle, die ein problem haben.

jedes netzwerkobjekt (in unserem beispiel OBJNetStatObiwan) besitzt ebenfalls eine variable errcnt (typ zahl). hier werden die fehler für jede netzwerkkomponente hochgezählt, damit nich gleich beim ersten auftreten eines fehlers (z.b. kurzzeitiges "hängen" eines dienstes) eine aktion (z.b. mail) ausgeführt wird, sonder erst nach wiederholtem auftreten.

aber jetzt gehts zum makro "MAKRONetzwerkMonitor1"

Code: Alles auswählen

<?
   $V_MAKRONetzwerkMonitor1_errcnt = 0;
   $V_MAKRONetzwerkMonitor1_prot = "";
   $s = fsockopen("obiwan.kugelmann.net", 80, $errno, $errstr, 1);
   if (!$s) {
      $V_MAKRONetzwerkMonitor1_prot = $V_MAKRONetzwerkMonitor1_prot."/http ";
      $V_MAKRONetzwerkMonitor1_errcnt++;
   }
   else
   {
      fclose($s);
   }

   $s = fsockopen("obiwan.kugelmann.net", 25, $errno, $errstr, 1);
   if (!$s) {
      $V_MAKRONetzwerkMonitor1_prot = $V_MAKRONetzwerkMonitor1_prot."/smtp ";
      $V_MAKRONetzwerkMonitor1_errcnt++;
   }
   else
   {
      fclose($s);
   }

   $s = fsockopen("obiwan.kugelmann.net", 110, $errno, $errstr, 1);
   if (!$s) {
      $V_MAKRONetzwerkMonitor1_prot = $V_MAKRONetzwerkMonitor1_prot."/pop3 ";
      $V_MAKRONetzwerkMonitor1_errcnt++;
   }
   else
   {
      fclose($s);
   }


   $s = fsockopen("obiwan.kugelmann.net", 3389, $errno, $errstr, 1);
   if (!$s) {
      $V_MAKRONetzwerkMonitor1_prot = $V_MAKRONetzwerkMonitor1_prot."/rdp ";
      $V_MAKRONetzwerkMonitor1_errcnt++;
   }
   else
   {
      fclose($s);
   }
?>

wenn prot = "" dann
   LOGNetzwerkStatus := "Serverstatus:<<<<obiwan.kugelmann.net ist OK"
sonst
   LOGNetzwerkStatus := "Serverstatus:<<<<obiwan.kugelmann.net ist fehlerhaft<<Protokoll " + prot + "down"
endewenn
wenn errcnt = 0 dann
   OBJNetStatObiwan := "ok"
   OBJNetStatObiwan.errcnt := 0
   OBJNetStatObiwan.mail := 0
sonst
   OBJNetStatObiwan.errcnt := OBJNetStatObiwan.errcnt + 1
endewenn
wenn OBJNetStatObiwan.errcnt >= 2 und errcnt > 0 und errcnt <= 2 dann
   OBJNetStatObiwan := "warnung"
   ** hier ggf. aktionen ausführen für den fall "warnung" 
endewenn
wenn OBJNetStatObiwan.errcnt >= 2 und errcnt > 2 dann
   OBJnetstatObiwan := "fehler"
   ** hier ggf. aktionen ausführen für den fall "fehler" 
endewenn
beschreibung des codes:

im php-teil wird mit fsockopen versucht, eine verbindung zum tcp-port des jeweiligen dienstes herzeustellen (z.b. port 80 für http, port 25 für smtp, port 110 für pop3 und port 3389 für remotedesktop-protokoll). ist dieser verbindungsaufbau erfolgreich, wird die session sofort wieder geschlossen. falls der zielport nicht reagiert, wird der fehlerzähler errcnt hochgezählt, der dann weiter unten ausgewertet wird.

im homeputer-makro-teil wird dann eben genau dieser zähler ausgewertet. hier kann man schwellen festlegen, wieviele errcnt's notwendig sind, um das objekt in den warnzustand oder fehlerzustand zu bringen. dies muss dann wiederum mehrfach erfolgen, bis das netzwerkobjekt diesen zustand annimmt und ggf. weitere aktionen ausgeführt werden.

der rest sollte selbsterklärend sein. falls nicht, einfach fragen stellen ...

viele grüße ...
... squeeezer

eiswette
Beiträge: 1
Registriert: 22.10.2008, 21:57

Re: Ein Netzwerkmonitor mit PHP

Beitrag von eiswette » 22.10.2008, 22:06

moin squeeezer,

hab mal eine Frage zu deinem netzwerkmonitor:

1. sag mal, wenn du so viele Geräte überwachst, hast du dann ein Makro geschrieben, das alle geräte abfragt oder für jedes gerät ein einzelnes??

2. ich nehme mal an für jedes ein einzelnes, wie bremst denn das php abfragen dein system aus? hab bei mir jetzt 5 laufen, die alle 3 minuten abfragen, damit die visualisierung auch nicht zu lange hinterher hängt..aber das homputer ja erst ein php script komplett abarbeiten lässt bevor es weiter macht, hängt das system eben alle 3 minuten...wollte aber schon gern so ca. 12 geräte abfragen, dann kann ich aber alles andere vergessen.
Zudem kommt, das zu der Zeit keine anderen fs20 befehle angenommen oder gesendet werden...

hätte da gern mal einen tipp, wie man das am geschicktesten löst, hatte hier im forum mal einen bericht gefunden, indem jmd sagt, das er das gleiche problem hat und es gelöst hat, indem er die php scripte extern ausführt (er wollte einen neuen thread aufmachen, finde den aber nicht)

vielleicht hast ja mal einen idee für mich..

Gruß aus dem hohen Norden....björn

tsa
Beiträge: 725
Registriert: 03.01.2008, 17:42
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Ein Netzwerkmonitor mit PHP

Beitrag von tsa » 22.10.2008, 22:14

Hi,

der Jemand war Sanys und zwar hier: http://homematic-forum.de/forum/viewtop ... 1916#p9991
Funktioniert wunderbar!

Gruss
Thomas

Benutzeravatar
honk0504
Beiträge: 111
Registriert: 09.03.2007, 19:28
Wohnort: Meckenheim | NRW
Hat sich bedankt: 1 Mal

Re: Ein Netzwerkmonitor mit PHP

Beitrag von honk0504 » 05.01.2010, 20:21

Bei mir kommt folgende Fehlermeldung:

Code: Alles auswählen

Unbekannter Bezeichner -> OBJNetStatObiwan.errcnt 
Jemand eine Idee?
There is certainly no intelligent life down here on this planet. Beam me up, Scotty!

Funkmaus
Beiträge: 96
Registriert: 17.02.2008, 11:59

Re: Ein Netzwerkmonitor mit PHP

Beitrag von Funkmaus » 05.01.2010, 20:55

Hallo,

hast du ggf die Variable errcnt vom Typ Zahl nicht im Makro angelegt?

Gruss

Funkmaus
*******************************************
HM/ HMIP/ Addons/ 242 Geräte
Never touch a running system!!

Benutzeravatar
honk0504
Beiträge: 111
Registriert: 09.03.2007, 19:28
Wohnort: Meckenheim | NRW
Hat sich bedankt: 1 Mal

Re: Ein Netzwerkmonitor mit PHP

Beitrag von honk0504 » 06.01.2010, 00:56

Was meinst Du mit: die Variable im Makro angelegt?
Wie macht man das?

:oops: :roll: Mein Fehler! Gefunden.
There is certainly no intelligent life down here on this planet. Beam me up, Scotty!

Benutzeravatar
honk0504
Beiträge: 111
Registriert: 09.03.2007, 19:28
Wohnort: Meckenheim | NRW
Hat sich bedankt: 1 Mal

Re: Ein Netzwerkmonitor mit PHP

Beitrag von honk0504 » 07.01.2010, 17:27

Alles super! Klappt nun wie geschmiert. :D
Ich möchte nun gerne die Anbindung ans WWW überwachen. Sprich: wenn die Verbindung nach außen verloren geht (in meinem Fall ein DNS-Server meines Providers) soll er es visualisieren. Ich würde das per ping machen ... wie bringe ich das dem Script/Makro bei?
There is certainly no intelligent life down here on this planet. Beam me up, Scotty!

Funkmaus
Beiträge: 96
Registriert: 17.02.2008, 11:59

Re: Ein Netzwerkmonitor mit PHP

Beitrag von Funkmaus » 07.01.2010, 18:02

Hallo,
prima dass es klappt.

Du könntest doch mal den Router ansprechen ansprechen.Ich glaube die Fritzbox hat standardmässig die IP Adresse: 192.168.178.1.

Aber vielleicht kannst du mir auch noch helfen:

Wie hast du denn deine Rechner im Netzwerk angesprochen?

Ich habe drei Rechner per Router verbunden wie sprichst du diese in PHP an.
Wäre schöen, wenn du dein Makro mal einstellst.

Gruss

Funkmaus.
*******************************************
HM/ HMIP/ Addons/ 242 Geräte
Never touch a running system!!

Benutzeravatar
honk0504
Beiträge: 111
Registriert: 09.03.2007, 19:28
Wohnort: Meckenheim | NRW
Hat sich bedankt: 1 Mal

Re: Ein Netzwerkmonitor mit PHP

Beitrag von honk0504 » 07.01.2010, 18:52

Welche Betriebssysteme hast Du denn auf den Rechnern installiert?
There is certainly no intelligent life down here on this planet. Beam me up, Scotty!

Funkmaus
Beiträge: 96
Registriert: 17.02.2008, 11:59

Re: Ein Netzwerkmonitor mit PHP

Beitrag von Funkmaus » 07.01.2010, 19:18

Hallo,
Windows 2000 und XP. Keine Serverversion.
Gruss

Funkmaus
*******************************************
HM/ HMIP/ Addons/ 242 Geräte
Never touch a running system!!

Antworten

Zurück zu „homeputer Studio / Standard: Programmierbeispiele“