Während meiner Ausbildung zum IT-Systemelektroniker in einem Berufsbildungswerk gab es die Situation, dass das “Azubi Internet” sehr unzuverlässig ist. Da dies einmal für die Rehabilitanten schlecht ist, die das Internet im Wohnbereich nutzen möchten und dafür jeden Monat 5€ zahlen müssen, ist es darüberhinaus besonders für eine “Abteilung” der kaufmännischen Ausbildung schlecht. Jene soll über das Internet Sachen versteigern, die nicht mehr benötigt werden. Dafür brauchen sie eine funktionierende Internetverbindung.
Um dieses “Azubi Internet” zu benutzen muss man den jeweiligen PC auf DHCP einstellen. Bei dem Aufrufen einer Internetseite wird man zu dem internen Server umgelenkt und muss sich an einer Firewall-Seite mit seinem Benutzernamen und einem Passwort anmelden. Es hat sich gezeigt, dass das anmelden an dieser Firewall Seite in der Regel funktioniert, man dann aber zu keiner Internetseite weiter kommt. Mit Hilfe des PING-Befehls konnte gezeigt werden, dass der interne Server zwar erreichbar ist, externe Server aber nicht.
Dieses Verhalten sollte ich nun eine automatisierte Dokumentation starten. Natürlcih gibt es dafür viele nützliche Werkzeuge, doch mein Ausbilder wollte, dass dies mit “Windows eigenen Mitteln” umgesetzt wird. Also habe ich mit dem Windows Scripting Host und dem Batch-Script gewidmet.
Entstanden ist das folgende Script, welches ich hier kurz vorstellen möchte, da es vielleicht der ein oder andere für seine eigenen Probleme nutzen möchte.
das Script
Wie mir bekannt war, ist über den PING-Befehl der Interne Server meistens erreichbar, externe Webseiten/Server aber nicht. Dieses Verhalten wollte ich nutzen und den Erfolg bzw. den Misserfolg zu dokumentieren. Damit das ganze übersichtlicher wird, sollte es eine fehler Datei und eine erfolg Datei geben in der dann mit Datum und Uhrzeit aufgeführt ist, wann es eine Erfolgreiche Verbindung gab und wann nicht.
aufruf.vbs
Die Datei sorgt dafür, dass das Script automatisch starten kann. Um dieses umzusetzen muss man eine ”Verknüpfung” im ”Autostart” Ordner für ”alle Benutzer” anlegen. Am einfachsten geht dies über den Explorer (Windowstaste + E) und dann in folgendes Verzeichnis wechseln: C:\Dokumente und Einstellungen\All Users\Startmenü\Programme\Autostart Dort dann eine neue Verknüpfung zur aufruf.vbs anlegen, die in der Regel unter folgendem Pfad zu finden ist: C:\ueberwachung\aufruf.vbs Die Datei ruft dann selbstständig die ”ueberwachung.bat” auf, die das eigentliche Script beinhaltet.
Der Quellcode der Datei sieht so aus:
1 2 | Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "ueberwachung.bat",0,True |
warten.vbs
Das zweite Helferlein ist die warten.vbs. Diese Datei sorgt dafür, dass das Script nur in einem vorgegebenen Zeitabstand Wiederholt wird. In meinem Beispiel habe ich es zurzeit auf eine Minute eingestellt.
1 2 3 4 5 | REM Zeit für die Wiederholung in Milisekunden wscript.sleep(60000) REM Zeitangaben REM eine Minute: 60000 REM halbe Minute: 30000 |
Die Zeitangabe erfolgt in Millisekunden. Um zu wissen, wieviele Millisekunden eine Minute oder eine halbe Minute hat, kann man zum Beispiel den Service von ConvertWorld.com nutzen. (Diese Seite bietet sehr viele Einheitsumrechner an.)
ueberwachung.bat
Das eigentliche Script läuft in der ueberwachung.bat Batch-Datei ab. Dank einem User von der Community Administrator.de habe ich es nun auch lauffähig bekommen. Hier erstmal der gesammte Quellcode der Datei:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | @ECHO OFF CD /D C:\ueberwachung MD %CD%\ergebnis\ SET FileOK=%CD%\ergebnis\erfolg.txt SET FileER=%CD%\ergebnis\fehler.txt SET FilePI=%CD%\ergebnis\ping.txt :ueberwachung REM Zeitverzoegertes wiederholen wscript warten.vbs REM Datum und Zeit in das Format xx.xx.xxxx xx:xx:xx einrichten SET datum=%date:~0% SET zeit=%time:~0,8% ECHO PING zu der IP des "BBW Servers" >> %FilePI% PING -n 1 10.10.10.1 >> %FilePI% REM Errorlevel in eine Variable speichern SET BBW=%errorlevel% ECHO PING zu der IP des "www.google.de" >> %FilePI% PING -n 1 www.google.de >> %FilePI% REM Errorlevel in eine Variable speichern SET GOOGLE=%errorlevel% ECHO PING zu der IP des "www.chip.de" >> %FilePI% PING -n 1 www.chip.de >> %FilePI% REM Errorlevel in eine Variable speichern SET CHIP=%errorlevel% REM leeren des DNS-Caches um zu gefährleisten, dass es nicht am Client liegt ipconfig /flushdns >> %FilePI% REM Abschließen der Datei ECHO. >> %FilePI% ECHO ------------------------------------------------------------ >> %FilePI% ECHO. >> %FilePI% REM Fehlerauswertung IF %BBW% == 0 ( echo %datum% %zeit% BBW-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% BBW-Server fehlerhaft >> %FileER% ) IF %GOOGLE% == 0 ( echo %datum% %zeit% GOOGLE-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% GOOGLE-Server fehlerhaft >> %FileER% ) IF %CHIP% == 0 ( echo %datum% %zeit% CHIP-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% CHIP-Server fehlerhaft >> %FileER% ) cls goto ueberwachung |
Erklärung zu dem Script
Das Script habe ich nun in einzelne Teile “zerlegt” um näher zu erklären, was in dem Script passiert. Anhand der Zeilennummerierung kann mana uch kontrollieren, an welcher Stelle man sich in dem Script befindet.
1 2 3 4 5 6 | @ECHO OFF CD /D C:\ueberwachung MD %CD%\ergebnis\ SET FileOK=%CD%\ergebnis\erfolg.txt SET FileER=%CD%\ergebnis\fehler.txt SET FilePI=%CD%\ergebnis\ping.txt |
Die erste Zeile schaltet das cmd-Fenster aus bzw. die Statusmeldungen dazu. Danach wechsel ich in das Verzeichnis, in dem sich das Script befindet. Ich habe hier C gewählt, da fast alle Windows Betriebssysteme unter C installiert sind. Alternativ könnte man auch die Umgebungsvariable %SYSTEMDRIVE% nutzen. Für mein Script brauchte ich natürlich noch ein Verzeichnis und habe es Sinnvoller weise ueberwachung getauft. In diesem Verzeichnis befinden sich alle drei benötigten Dateien. Im Anschluss daran wird das Unterverzeichnis ergebnis erstellt, in dem sich dann die logs befinden.
Am Ende dieses ersten Abschnittes werden dann drei Variablen definiert. Jene werden im Script benötigt, um die Statusmeldungen usw. in die Dateien zu schreiben.
8 9 10 11 12 13 | :ueberwachung REM Zeitverzoegertes wiederholen wscript warten.vbs REM Datum und Zeit in das Format xx.xx.xxxx xx:xx:xx einrichten SET datum=%date:~0% SET zeit=%time:~0,8% |
Dies ist der Beginn der “Schleife”, also dem Teil, der sich ständig wiederholt. Für diesen Zweck wurde erstmal die Sprungmarke benannt. Danach wird das Script warten.vbs aufgerufen, wodurch das Script nur Minutlich (je nach Einstellung) durchgeführt wird. Danach habe ich noch zwei Variablen bestimmt, damit das Datum in ”dd.mm.jjjj” und die Zeit in ”hh:mm:ss” dargestellt wird.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 | ECHO PING zu der IP des "Internen Servers" >> %FilePI% PING -n 1 10.10.10.1 >> %FilePI% REM Errorlevel in eine Variable speichern SET INTERN=%errorlevel% ECHO PING zu der IP des "www.google.de" >> %FilePI% PING -n 1 www.google.de >> %FilePI% REM Errorlevel in eine Variable speichern SET GOOGLE=%errorlevel% ECHO PING zu der IP des "www.chip.de" >> %FilePI% PING -n 1 www.chip.de >>; %FilePI% REM Errorlevel in eine Variable speichern SET CHIP=%errorlevel% |
Bei diesen drei “Blöcken” handelt es sich um das Pingen zu den einzelnen Servern. Als erstes habe ich hier den Internen Server genommen, der in meinem Fall die IP-Adresse 10.10.10.1 hat. Der Schalter ”-n 1” bestimmt die Anzahl der echo Anforderungen. Für das loggen reicht eine Anforderung aus. Im zweiten Teil dieses Block wird wieder eine Variable bestimmt, die den Wert des errorlevels erhalten soll. Die Namen der Variablen sind frei wählbar und ich habe INTERN für den internen Server, GOOGLE für die google.de Domain und CHIP für die chip.de Domain gewählt, da man so besser den Überblick behalten kann.
Der gleiche Aufbau folgt nun noch zweimal. Einmal für die Domain www.google.de und einmal für www.chip.de, da ich einen Ping auch nach außerhalb haben möchte. Und ich habe diese beiden Unterschiedlichen Seiten genommen, da ja im schlechtesten Fall auch der Server von einer der beiden Seiten ausfallen könnte. Auch habe ich auf eine feste IP-Adresse verzichtet, da ich nicht sicher gehen kann, dass jene immer verfügbar sind (die Domains könnten ja unterumständen auf einen anderen Server auflaufen oder ähnliches.).
30 31 | REM leeren des DNS-Caches um zu gefährleisten, dass es nicht am Client liegt ipconfig /flushdns >> %FilePI% |
Dieser “Befehl” sorgt dafür, dass der DNS-Cache des Clients (also der PC auf dem das Script läuft) geleert wird. Ich selbst finde dieses Sinnvoll um aus zu schließen, dass der Client “schuld” an dem nicht erreichen einer Internetseite ist. (Denn der PC könnte im schlechtesten Fall sich merken, dass eine Seite nicht erreichbar ist – um das zu verhindern bzw. zu ändern, muss man wohl den DNS-Cache leeren.)
33 34 35 36 | REM Abschließen der Datei ECHO. >> %FilePI% ECHO ------------------------------------------------------------ >> %FilePI% ECHO. >> %FilePI% |
Die Datei ping.txt wird sehr groß und unübersichtlich. Um die einzelnen Scriptdurchläufe von einander zu trennen, habe ich in die Datei eine Leerzeile, die “Strichzeile” und wieder eine Leerzeile schreiben lassen. Danach folgt in der ping.txt die neuen Ergebnisse.
38 39 40 41 42 43 | REM Fehlerauswertung IF %INTERN% == 0 ( echo %datum% %zeit% BBW-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% BBW-Server fehlerhaft >> %FileER% ) IF %GOOGLE% == 0 ( echo %datum% %zeit% GOOGLE-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% GOOGLE-Server fehlerhaft >> %FileER% ) IF %CHIP% == 0 ( echo %datum% %zeit% CHIP-Server erfolgreich >> %FileOK% ) ELSE ( echo %datum% %zeit% CHIP-Server fehlerhaft >> %FileER% ) cls goto ueberwachung |
Das war nun der Teil des Scriptes, mit dem ich ein wenig Probleme hatte. Diese drei “Blöcke” sind nun wieder für jeden einzelnen Ping zu sehen, die ich im obigen Teil des Scriptes anpinge.
- Als erstes beziehe ich mich auf den Wert des jeweiligen errorlevels, was ich zuvorher in der Variable zum Pingziel (INTERN / GOOGLE / CHIP) definiert habe. Ist kein Fehler vorhanen (errorlevel = 0), dann schreibe ich in die Datei erfolg.txt das Datum, die Uhrzeit und die Meldung, dass der betreffende Server erreichbar ist.
- Im zweiten Teil dieser Bedingung schreibe ich die Fehlermeldung in die fehler.txt. Auch hierbei habe ich wieder das Datum, die Uhrzeit und eine Statusmeldung genommen.
- Das schreiben in die jeweilige Datei erfolgt über die ”>>” gefolgt von der Variable für die jweilige Datei, die ich am Anfang des Scriptes definiert habe. Das findet sich auch bei den einzelnen PING-Befehlen wieder, da ich jene in die Datei ping.txt schreiben lasse.
das loggen
Alle drei Dateien befinden sich im Verzeichnis C:\ueberwachung und die log-Dateien in dem Unterverzeichnis ergebnis. Das Script erstellt drei Dateien:
- erfolg.txt
- fehler.txt
- ping.txt
In den beiden ersten Dateien gibt es eine “Statusmeldung”, jenachdem ob ein Server (Pingziel) erreichbar ist oder nicht. Aufgebaut sind die Dateien wie folgt:
Datum Zeit Meldung 30.09.2009 9:50:30 Server ABC erreichbar 30.09.2009 9:50:30 Server XYZ nicht erreichbar
In die Datei ping.txt wird das Ergebnis der einzelnen PINGs und des DNS-Cache leerens geschrieben. Jenes ist für das normale loggen eher uninteressant und wurde erstmal nur angelegt, um zu überprüfen, dass das Script arbeitet und wir als Administratoren können dort nochmal sehen, wie viel Verlust es bei den PINGs gab oder nicht gab. Aber für das normale loggen und auswerten der Verbindung ist diese Datei nicht weiter notwendig.
Download
Das funktionsfähige und fertige Script könnt ihr bei mir Downloaden. Im Angebot habe ich gepackte Archive und welche, die selbstentpackent sind. Viel vergnügen damit:
- gepackte Archive
- 7-Zip Archiv: ueberwachung.7z
- rar Archiv: ueberwachung.rar
- tar Archiv: ueberwachung.tar
- Zip Archiv: ueberwachung.zip
- selbst entpackende Archive
- selbst entpackendes Archiv (exe)
ein Fazit?
Das Script ist funktionstüchtig und kann hier (kommt noch) gedownloaded werden. In der Datei ueberwachung.bat muss man nur für das jeweilige “Einsatzgebiet” die IP-Adresse des Internen Server (oder Routers, BRouters, etc.) angepasst werden.
Es ist angedacht, dass das Script noch verändert wird und die “Statusmeldungen” in ein Format geschrieben werden, welches mit einem Tabellenkalkulationsprogramm (z.B. Excell, Calc) gelesen werden können, damit man jene Tabelle bekommt:
| Dokumentation der Netzwerk- und Internetverbindung | ||||||||
|---|---|---|---|---|---|---|---|---|
| interner Server | Server google.de | Server chip.de | ||||||
| Datum | Zeit | Server | Datum | Zeit | Server | Datum | Zeit | Server |
| 30.09.2009 | 09:00:00 | Ping erfolgreich | 30.09.2009 | 09:00:00 | Ping fehlgeschlagen | 30.09.2009 | 09:00:00 | Ping fehlgeschlagen |
| 30.09.2009 | 09:01:00 | Ping erfolgreich | 30.09.2009 | 09:01:00 | Ping fehlgeschlagen | 30.09.2009 | 09:01:00 | Ping fehlgeschlagen |
| 30.09.2009 | 09:02:00 | Ping erfolgreich | 30.09.2009 | 09:02:00 | Ping fehlgeschlagen | 30.09.2009 | 09:02:00 | Ping fehlgeschlagen |
Doch das ist zurzeit noch Zukunftsmusik, da ich mich dafür erstmal mit CSV-Dateien auseinandersetzten muss.













