tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
840
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #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
     

  2. #2
    olqs olqs ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Beiträge
    396
    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
    Alex
    Geändert von olqs (15.07.11 um 12:01 Uhr)
     
    Fi/Si - Fachbereiche Netzwerk Security, VMware vSphere, Storage und AIX/Linux

  3. #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
     

  4. #4
    olqs olqs ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Beiträge
    396
    Falls die was am Skript unklar ist, dann einfach fragen.
     
    Fi/Si - Fachbereiche Netzwerk Security, VMware vSphere, Storage und AIX/Linux

  5. #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
     

  6. #6
    olqs olqs ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Beiträge
    396
    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
    Alex
    Geändert von olqs (15.07.11 um 12:05 Uhr)
     
    Fi/Si - Fachbereiche Netzwerk Security, VMware vSphere, Storage und AIX/Linux

  7. #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.)
     

  8. #8
    olqs olqs ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Beiträge
    396
    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

  9. #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
     

  10. #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!
     

  11. #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

  1. Batch Datei erstellen die update prüft
    Von MABKS im Forum Microsoft Windows
    Antworten: 0
    Letzter Beitrag: 26.01.11, 03:34
  2. Zeilenumbruch in Batch schreiben [ehemals Hilde bei Batch]
    Von Seppi123 im Forum Sonstige Sprachen
    Antworten: 5
    Letzter Beitrag: 11.07.10, 18:35
  3. [Batch] Per Batch Textzeile auslesen und Verbindung testen?
    Von overreaction im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 15.03.08, 20:18
  4. [Batch] Am Server anmelden
    Von _root im Forum Sonstige Sprachen
    Antworten: 0
    Letzter Beitrag: 23.05.07, 10:38
  5. [Batch] FTP Server connecten
    Von nicok im Forum Sonstige Sprachen
    Antworten: 14
    Letzter Beitrag: 12.08.06, 03:10

Stichworte