Muckels Tagebuch

aus dem Leben geschrieben

 
 :: 
drucken PDF-Dokument email Nachrichtenfeed bearbeiten
Verfasst von Muckel.

Netzwerküberwachung via Batch-Skript

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.

  1. 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.
  2. 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.
  3. 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:

  1. erfolg.txt
  2. fehler.txt
  3. 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.

Daten: Verfasst von Muckel, am 4. Mai 2010, um 7:52 Uhr.
Abgelegt unter: Informations Technik, Programmieren
Schlagworte: , , , , , , , , , ,
Verwendung:  drucken  PDF-Dokument  email  Nachrichtenfeed  bearbeiten  dauerhafter LinkTrackback
Kommentare: Es wurde noch kein Kommentar geschrieben.

Kommentare und Reaktionen

Schreibe eine Antwort

Hallo Du,
erstmal vielen Dank, dass Du ein Kommentar zu einem meiner Inhalte schreibst. An Feedback bin ich immer interessiert, denn nur durch ihn kann ich die Inhalte in meinem Blog verbessern und zudem ist der Austausch zu Menschen immer was positives für mich. Durch mein Blog bin ich kein annonymer Mensch für Dich, daher wäre es fair, wenn Du auch sagst, wer Du bist. (Wenn Du dies nicht öffentlich machen möchtest, so gib bitte eine gültige E-Mail Adrsse an, denn jene wird nicht veröffentlicht, ist aber für mich einsehbar und bei einem Anliegen auch Kontakt mit Dir aufnehmen.) Sieh es am besten wie einen Leserbrief in einer Zeitung - die sind in der Regel auch nicht annonym.

Vielen Dank für dein Verständnis,
Muckel (Tobias)

Persöhnliche Angaben




(Jene wird nicht veröffentlicht, aber benötigt.)



dein Kommentar

Du kannst folgende XHTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">


Beenden der Eingabe


 :: 
Internetseite von Autor. Inhalte sind als Nachrichten-Feed verfügbar.
Valid XHTML 1.0 Transitional CSS ist valide! PHP Wordpress Notepad-Plus RSS-Feed Creative-Commons-Licens spenden kostenloser Counter