ERLEDIGT
JA
JA
ANTWORTEN
10
10
ZUGRIFFE
840
840
EMPFEHLEN
-
14.07.11 14:18 #1
- Registriert seit
- Jul 2011
- Beiträge
- 7
Hallo liebe Member!
Hab mich mal hier neu angemeldet, scheint ein nettes Forum zu sein
Zu meinem Problem:
Ich brauche ein Batch-Script, das mehrere DNS-Server in einer Liste (servers.txt) ausliest, die dann mit "nslookup" auf ihre Funktionstüchtigkeit überprüft werden. (Der zu prüfende Host bleibt gleich z.B. immer www.google.com da ja nur der Server überprüft werden soll ob er funktioniert.
Das Ergebnis soll gespeichert und dann ausgewertet werden.
Bei einem Fehler soll das ganze noch im Windows System-Log als Error vermerkt werden (diesen Teil weiß ich schon)
Das ganze Script soll auch so klein wie möglich bleiben.
Ich habe das auslesen jetzt mit for-Schleifen gemacht und das auswerten soll mit "findstr" oder "find" geschehen.
Hier die Zeile zum auslesen, überprüfen und Ergebnisse abspeichern:
Code :1
for /f %%i in (servers.txt) do @nslookup www.google.com %%i 1>>results.txt 2>>errors.txt
Damit kommen die Ergebnisse in die results.txt und die Fehler extra in die errors.txt (beides in 1 geht in der for-schleife leider nicht
)
Nun weiß ich aber nicht genau wie ich da jeden Server extra auslese bzw. die Fehler zuordne, denn die zwei txt Dateien passen zum Vergleichen gar nicht gut zusammen.
Zur praktischen Anwendung:
Das ganze soll dann in einer Serverumgebung eingesetzt werden, um automatisch gewarnt zu werden wenn ein DNS-Server nicht ordnungsgemäß funktioniert.
(Der System-Log wird von einer speziellen Software auf Fehler überprüft)
Bin für andere Vorschläge, Verbesserungen, Lob und Kritik offen
Seid bitte nicht böse wenn ich etwas nicht gleich kapiere, ich bin unter 18 und Lehrling
-
Also ich würde das ein bisschen anders machen:
Mein Batch File (mit anleihen aus http://www.ericphelps.com/batch/samp...stsExpired.txt )
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
@echo off SET SERVERFILE=D:\temp\servers.txt SET STATSFILE=D:\temp\dns.stats more %STATSFILE%>%STATSFILE% for /f %%i in (%SERVERFILE%) do ( nslookup -type=A test.server.tld %%i 2>nul | find /c "Address" | find "2" >nul if errorlevel 1 ( echo %DATE% %TIME% %%i geht >> %STATSFILE% ) ELSE ( echo %DATE% %TIME% %%i geht nicht >> %STATSFILE% ) )
Danach hast du eine Datei zum auswerten
Gruss
AlexGeändert von olqs (15.07.11 um 12:01 Uhr)
Fi/Si - Fachbereiche Netzwerk Security, VMware vSphere, Storage und AIX/Linux
-
14.07.11 20:49 #3
- Registriert seit
- Jul 2011
- Beiträge
- 7
Hallo Alex

Vielen Dank für den Vorschlag!
Ich kann das Script derzeit zwar nicht so gut testen (hab zu Hause keine Serverlandschaft
) aber im kleinen Netzwerk funktioniert das schon sehr gut 
Morgen werde ich es dann noch ausgiebig an den Servern testen.
Ich lass derweil den Thread noch auf Status "ungelöst" bis morgen, aber ich glaube du hast mir schon sehr geholfen
MfG
little_evil
-
Falls die was am Skript unklar ist, dann einfach fragen.
Fi/Si - Fachbereiche Netzwerk Security, VMware vSphere, Storage und AIX/Linux
-
15.07.11 10:08 #5
- Registriert seit
- Jul 2011
- Beiträge
- 7
Ok, ich habe es jetzt noch einmal getestet, aber ziemlich alle Server werden als nicht funktionierend gemeldet. Ausser einer: ein offener DNS-Server von Google (8.8.8.8). Ich weiß nicht genau was da jetzt nicht hinhaut.
Ich weiß auch nicht genau warum diese Zeile eine "2" auslesen soll:
nslookup -type=A [intra-nwt] %%i 2>nul | find /c "Address" | find "2" >nul
Sollte die Zeile den Error-Output (2) auslesen?
Das [intra-nwt] hab ich natürlich ausgetauscht mit meiner IP (bin im Netzwerk).
Ich habe die Server separat in der cmd ausprobiert und sie haben funktioniert
Hier die Test-Ergebnisse in den dns.stats (Hab testweise auch ein paar "Fake-Server" reingetan):
Code :1 2 3 4 5
15.07.2011 9:57:03,31 Server1 geht nicht 15.07.2011 9:57:03,31 Server2 geht nicht 15.07.2011 9:57:03,31 help(fake-server) geht nicht 15.07.2011 9:57:03,31 8.8.8.8 geht 15.07.2011 9:57:03,31 abc(fake-server) geht nicht
Könnte man das Script nicht noch ein bisschen einfacher machen, also ohne Datei zum auswerten, sodass bei einem error sofort der Server+Error in den System-Log eingetragen werden?
z.B.
Code :1
eventcreate /L SYSTEM /I ERROR /SO nslookup-script /ID %ID% /D Server %server% funktioniert nicht!
Ich hoffe ich verlange nicht zu viel
-
Ok, da hab ich doch einen internen Testserver von mir noch im Skript stehen lassen.

Der Trick bei der Befehlszeile ist eigentlich das find /c "Address" davor.
Schau dir mal die Ausgabe eines funktionierenden DNS Aufrufes an und den eines fehlgeschlagenen.
Bei einem funktionierendem stehen 2 Adress Zeilen drin, bei einem nicht funktionierenden eine. Die /c Option beim find zählt die passenden Zeilen und das zweite find überprüft, ob genau 2 Zeilen gefunden wurden.
Und da kommen wir auch schon zu einem Problem
Ich habe die "geht" und "geht nicht" Zeile vertauscht.
Kommt es dann bei dir mit der Ausgabe hin, wenn du die Ausgabe "umdrehst"?
Das aus nem Firmennetz kein direkter DNS Lookup aus dem Internet geht ist nicht ungewöhnlich.
Interessant wäre die Ausgabe der nslookup Befehle ohne die find's. Dann könnte man mehr damit anfangen.
Deine zweite Frage geht einfach:
lösche den else () Zweig raus und schreibe statt der verbliebenen echo Zeile deinen Befehl rein.
%server% musst du mit %%i austauschen.
Gruss
AlexGeändert von olqs (15.07.11 um 12:05 Uhr)
Fi/Si - Fachbereiche Netzwerk Security, VMware vSphere, Storage und AIX/Linux
-
15.07.11 12:57 #7
- Registriert seit
- Jul 2011
- Beiträge
- 7
Ahh danke, jetzt ist mir einiges klarer

Jetzt hab ich mal das Script ein bisschen zurechtgestutzt:
Code :1 2 3 4 5 6 7
@echo off SET SERVERFILE=servers.txt for /f %%i in (%SERVERFILE%) do ( nslookup -type=A [meine-ip] %%i 2>nul | find /c "Address" | find "2" >nul if errorlevel 1 (eventcreate /L SYSTEM /I ERROR /SO nslookup-script /ID 1 /D Server %%i funktioniert nicht!) )
Gut, jetzt ist es aber so, dass die "Fake-Server", die in der servers.txt vorhanden sind auch als funktionierend eingestuft werden, obwohl sie gar nicht vorhanden sind. (soll einen "Totalausfall" eines Servers darstellen
)
Falls der Server nicht gefunden wird, gibt der Befehl trotzdem eine Antwort weil er auf einen anderen Server (Standard) ausweicht. Daraus resultiert, dass das Ergebnis stimmt und der Fehler somit nicht im System-Log steht/erkannt wird.
Die Fehlermeldung das der Server nicht gefunden wird, wird ja mit 2>nul weggefiltert. Vielleicht kann man da was verwenden
?
Kann man dass nicht irgendwie erzwingen dass er explizit nur die angegebenen Server prüft (ohne ausweichen)?
(Ich kenn mich mit der Serverstruktur der Firma nicht sehr aus, da es zu groß ist
, aber das Script soll irgendwo zentral in einem Subnet alle dortigen DNS-Server abfragen.)
-
Kannst du die komplette Ausgabe von so einem nslookup auf einen nicht existenten Server mal hier posten inkl Befehlszeile.
Bei mir funktioniert nämlich das Skript genau in so einem Fall schon
Code :1 2 3 4 5 6 7 8 9 10 11
C:\Windows\system32>nslookup mein.server.tld 10.10.10.10 DNS request timed out. timeout was 2 seconds. Server: UnKnown Address: 10.10.10.10 DNS request timed out. timeout was 2 seconds. DNS request timed out. timeout was 2 seconds. *** Zeitüberschreitung bei Anforderung an UnKnown.
Es steht nur einmal Address drin und liefert ein funktioniert nicht zurück. Ich hab sogar den Netzwerkverkehr mitgesnifft, der frägt bei mir nur 10.10.10.10 und springt nicht auf die im Windows konfigurierten DNS Server weiter.
Jetzt fällts mir auf, falls er den Namen des DNS Servers nicht auflösen kann, dann ignoriert er die Angabe und frägt die Eingestellten. Da muss mans ein bischen umbauen.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
@echo off SET SERVERFILE=servers.txt for %%i in (%SERVERFILE%) do call :DNSCHECK %%i goto :EOF :DNSCHECK nslookup %1 2>nul | find /c "Address" | find "2" > nul if errorlevel 1 goto :ERROR %1 nslookup -type=A [meine-ip] %1 2>nul | find /c "Address" | find "2" >nul if errorlevel 1 goto :ERROR %1 goto :EOF :ERROR eventcreate /L SYSTEM /I ERROR /SO nslookup-script /ID 1 /D Server %1 funktioniert nicht! :EOF
Sollte denk ich jetzt so funktionieren wie gewünscht. Batch ist so lang her, aber ist nie schlecht wenn mans wieder mal ein bisschen auffrischt.
Fi/Si - Fachbereiche Netzwerk Security, VMware vSphere, Storage und AIX/Linux
-
15.07.11 14:55 #9
- Registriert seit
- Jul 2011
- Beiträge
- 7
Also das wird es wahrscheinlich sein, dass der so überspringt.
Also hier der lookup für einen nicht-vorhandenen Server (hab aber zur Sicherheit die IPs/Servernamen abgeändert):
Code :1 2 3 4 5 6 7
C:\Documents and Settings\Administrator>nslookup 9.31.43.123 abc.firma.com *** Can't find server address for 'abc.firma.com': Server: standard.dns.firma.com Address: 9.23.173.13 Name: MeinPC.firma.com Address: 9.31.43.123
Wenn ich das Script verwende, kommt folgendes am Ende:
ERROR: Invalid Argument/Option - 'servers.txt'.
Type "EVENTCREATE /?" for usage.
Da hats wahrscheinlich die Variablen, die weitergegeben werden durcheinander gewirbelt
Also, ich muss mich da nochmal zu Hause beschäftigen, aber jetzt mus ich mit dem Zug weg
-
16.07.11 08:41 #10
- Registriert seit
- Jul 2011
- Beiträge
- 7
Ok, ich denke jetzt ist das Thema gelöst
Ein Arbeitskollege setzt sich am MO mit mir zusammen und dann schauen wir das gemeinsam durch.
Trotzdem vielen Dank für deine Hilfe, hat mir sehr weitergeholfen!
-
18.07.11 10:20 #11
- Registriert seit
- Jul 2011
- Beiträge
- 7
Hier noch als Abschluss der funktionierende Script:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
@echo off SET SERVERFILE=%temp%\servers.txt for /f %%i in (%SERVERFILE%) do echo %%i & call :DNSCHECK %%i goto :EOF :DNSCHECK nslookup %1 2>nul | find /c "Address" | find "2" >nul if errorlevel 1 goto :ERROR %1 nslookup -type=A 9.158.45.182 %1 2>nul | find /c "Address" | find "2" >nul if errorlevel 1 goto :ERROR %1 goto :EOF :ERROR eventcreate /L SYSTEM /T ERROR /SO nslookup-script /ID 1 /D "Server %1 funktioniert nicht!" :EOF
/closed
Ähnliche Themen
-
Batch Datei erstellen die update prüft
Von MABKS im Forum Microsoft WindowsAntworten: 0Letzter Beitrag: 26.01.11, 03:34 -
Zeilenumbruch in Batch schreiben [ehemals Hilde bei Batch]
Von Seppi123 im Forum Sonstige SprachenAntworten: 5Letzter Beitrag: 11.07.10, 18:35 -
[Batch] Per Batch Textzeile auslesen und Verbindung testen?
Von overreaction im Forum Sonstige SprachenAntworten: 1Letzter Beitrag: 15.03.08, 20:18 -
[Batch] Am Server anmelden
Von _root im Forum Sonstige SprachenAntworten: 0Letzter Beitrag: 23.05.07, 10:38 -
[Batch] FTP Server connecten
Von nicok im Forum Sonstige SprachenAntworten: 14Letzter Beitrag: 12.08.06, 03:10





Zitieren
Login





