Pingen und Logfile

  • hey... ich hab mal testweise das script von autoit/forum/ping benutzt

    Spoiler anzeigen
    [autoit]

    #cs-----------------------------------------------------------------------------------------------------------
    | Author: Raylow (Special thx to "funkey" --> http://www.autoit.de)
    | Date: 23.04.2009
    | Script Version: 2.1.0.1
    |
    |
    #ce-----------------------------------------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=Netzwerkverbindung.ico
    #AutoIt3Wrapper_Res_Description=Application to ping a host periodically
    #AutoIt3Wrapper_Res_Fileversion=2.1.0.1
    #AutoIt3Wrapper_Res_Icon_Add=paste.ico
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstantsEx.au3>
    #include <ButtonConstants.au3>
    #include <File.au3>
    #include <windowsconstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $ping = -1, $pingCopy = -2
    Global $intervall = "60000"
    Global $date= @YEAR & "-" & @MON & "-" & @MDAY
    Global $stopped = 0
    Global $path = ""
    $StartFolder = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $Form1_1 = GUICreate("Ping-Assi", 247, 145, 240, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1_1Close")
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    $Label1 = GUICtrlCreateLabel("Host to ping", 8, 8, 80, 17)
    $Label2 = GUICtrlCreateLabel("Intervall", 160, 8, 38, 17)
    $Label3 = GUICtrlCreateLabel("Logfile Path", 8, 58, 98, 17)

    [/autoit] [autoit][/autoit] [autoit]

    Global $Input1 = GUICtrlCreateInput($Input1, 8, 24, 105, 21)
    ControlFocus($Form1_1, "",$Input1)
    Global $Input2 = GUICtrlCreateInput($intervall, 160, 24, 32, 21)
    Global $Input3 = GUICtrlCreateInput("", 8, 74, 194, 21)

    [/autoit] [autoit][/autoit] [autoit]

    Global $Button1 = GUICtrlCreateButton("Start", 8, 104, 114, 30, $BS_DEFPUSHBUTTON)
    GUICtrlSetOnEvent(-1, "Button1Click")
    Global $Button2 = GUICtrlCreateButton("Stop", 126, 104, 114, 30)
    GUICtrlSetOnEvent(-1, "Button2Click")
    GUICtrlSetState($Button2, $GUI_DISABLE)
    Global $Button3 = GUICtrlCreateButton("...", 205, 74, 35, 21)
    GUICtrlSetOnEvent(-1, "Button3Click")
    Global $Button4 = GUICtrlCreateButton("Clip", 115, 24, 35, 21, $BS_ICON)
    GUICtrlSetImage($Button4, @ScriptFullPath, -5, 0)
    GUICtrlSetOnEvent(-1, "Button4Click")
    Global $Button5 = GUICtrlCreateButton("?", 225, 8, 15, 17)
    GUICtrlSetOnEvent(-1, "Button5Click")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(5000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Button5Click()
    MsgBox(64, "About Ping-Assi", "This programm was written by Raylow ([email='raylow.com@gmail.com'][/email]). Special thx to funkey --> http://www.autoit.de")
    ControlFocus($Form1_1, "",$Input1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Button4Click()
    GUICtrlSetData($Input1, ClipGet())
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Button3Click()
    Dim $fileName

    If GUICtrlRead($Input1) = "" Then
    $var = FileSaveDialog("Save logfile..", $StartFolder, "Logfile (*.*)", 16, "log.txt")
    Else
    $var = FileSaveDialog("Save logfile..", $StartFolder, "Logfile (*.*)", 16, StringReplace(GUICtrlRead($Input1), ".", "_") & ".txt")
    EndIf


    If @error Then

    Else
    GUICtrlSetData($Input3, $var)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Button1Click()
    If GUICtrlRead($Input1) <> "" Then
    Global $IP = StringReplace(GUICtrlRead($Input1), ".", "_")
    If GUICtrlRead($Input3) = "" Then
    Global $logfile = $IP & ".txt"
    Else
    Global $logfile = GUICtrlRead($Input3)
    EndIf

    Local $IPAdresse = GUICTrlRead($Input1)
    $ping = Ping($IPAdresse, 1800)
    _FileWriteLog($logfile, '----- ' & 'STARTED' & ' -----')
    _FileWriteLog($logfile, $IPAdresse & ' | ' & $ping)
    $pingCopy = $ping

    AdlibRegister('_Zyklus', GUICtrlRead($Input2 *1000))
    GUICtrlSetState($Button1, $GUI_DISABLE)
    GUICtrlSetState($Button2, $GUI_ENABLE)
    GUICtrlSetState($Button3, $GUI_DISABLE)
    GUICtrlSetState($Button4, $GUI_DISABLE)
    GUICtrlSetState($Input1, $GUI_DISABLE)
    GUICtrlSetState($Input2, $GUI_DISABLE)
    GUICtrlSetState($Input3, $GUI_DISABLE)
    Else
    MsgBox(16,"Missing Input","Be sure to set the host to ping and an intervall!")
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Button2Click()
    _FileWriteLog($logfile, '----- ' & 'STOPPED' & ' -----')
    $stopped = 2
    AdlibUnregister()
    GUICtrlSetState($Button1, $GUI_ENABLE)
    GUICtrlSetState($Button2, $GUI_DISABLE)
    GUICtrlSetState($Button3, $GUI_ENABLE)
    GUICtrlSetState($Button4, $GUI_ENABLE)
    GUICtrlSetState($Input1, $GUI_ENABLE)
    GUICtrlSetState($Input2, $GUI_ENABLE)
    GUICtrlSetState($Input3, $GUI_ENABLE)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Zyklus()
    Local $IPAdresse = GUICTrlRead($Input1)
    $ping = Ping($IPAdresse)
    $stopped = 1
    If $ping <> $pingCopy Then _FileWriteLog($logfile, $IPAdresse & ' | ' & $ping)
    $pingCopy = $ping
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Form1_1Close()
    If $stopped = 1 Then
    _FileWriteLog($logfile, '----- ' & 'STOPPED' & ' -----')
    Else

    EndIf

    Exit
    EndFunc

    [/autoit]

    Allerdings hab ich ne frage...
    wie bekomm ich das hin, das er nur die offline bzw nicht erreichbar zeiten in die log schreibt.. mir kommt es so vor das er bis jetzt willkürlich irgendwas loggt, trotz intervall 10000:

  • Du Loggst ja auch nur die Pingzeiten ;)

    Spoiler anzeigen
    [autoit]

    #comments-start-----------------------------------------------------------------------------------------------------------
    ; Author: Raylow (Special thx to "funkey" --> http://www.autoit.de)
    ; Date: 23.04.2009
    ; Script Version: 2.1.0.1
    ;
    ;
    #comments-end-----------------------------------------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    #NoTrayIcon
    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=Netzwerkverbindung.ico
    #AutoIt3Wrapper_Res_Description=Application to ping a host periodically
    #AutoIt3Wrapper_Res_Fileversion=2.1.0.1
    #AutoIt3Wrapper_Res_Icon_Add=paste.ico
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstantsEx.au3>
    #include <ButtonConstants.au3>
    #include <File.au3>
    #include <windowsconstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $ping = -1, $pingCopy = -2
    Global $intervall = "60000"
    Global $date = @YEAR & "-" & @MON & "-" & @MDAY
    Global $stopped = 0
    Global $path = ""
    $StartFolder = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $Form1_1 = GUICreate("Ping-Assi", 247, 145, 240, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1_1Close")
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    $Label1 = GUICtrlCreateLabel("Host to ping", 8, 8, 80, 17)
    $Label2 = GUICtrlCreateLabel("Intervall", 160, 8, 38, 17)
    $Label3 = GUICtrlCreateLabel("Logfile Path", 8, 58, 98, 17)

    [/autoit] [autoit][/autoit] [autoit]

    Global $Input1 = GUICtrlCreateInput("", 8, 24, 105, 21)
    ControlFocus($Form1_1, "", $Input1)
    Global $Input2 = GUICtrlCreateInput($intervall, 160, 24, 32, 21)
    Global $Input3 = GUICtrlCreateInput("", 8, 74, 194, 21)

    [/autoit] [autoit][/autoit] [autoit]

    Global $Button1 = GUICtrlCreateButton("Start", 8, 104, 114, 30, $BS_DEFPUSHBUTTON)
    GUICtrlSetOnEvent(-1, "Button1Click")
    Global $Button2 = GUICtrlCreateButton("Stop", 126, 104, 114, 30)
    GUICtrlSetOnEvent(-1, "Button2Click")
    GUICtrlSetState($Button2, $GUI_DISABLE)
    Global $Button3 = GUICtrlCreateButton("...", 205, 74, 35, 21)
    GUICtrlSetOnEvent(-1, "Button3Click")
    Global $Button4 = GUICtrlCreateButton("Clip", 115, 24, 35, 21, $BS_ICON)
    GUICtrlSetImage($Button4, @ScriptFullPath, -5, 0)
    GUICtrlSetOnEvent(-1, "Button4Click")
    Global $Button5 = GUICtrlCreateButton("?", 225, 8, 15, 17)
    GUICtrlSetOnEvent(-1, "Button5Click")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(5000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Button5Click()
    MsgBox(64, "About Ping-Assi", "This programm was written by Raylow ([email='raylow.com@gmail.com'][/email]). Special thx to funkey --> http://www.autoit.de")
    ControlFocus($Form1_1, "", $Input1)
    EndFunc ;==>Button5Click

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Button4Click()
    GUICtrlSetData($Input1, ClipGet())
    EndFunc ;==>Button4Click

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Button3Click()
    Dim $fileName

    [/autoit] [autoit][/autoit] [autoit]

    If GUICtrlRead($Input1) = "" Then
    $var = FileSaveDialog("Save logfile..", $StartFolder, "Logfile (*.*)", 16, "log.txt")
    Else
    $var = FileSaveDialog("Save logfile..", $StartFolder, "Logfile (*.*)", 16, StringReplace(GUICtrlRead($Input1), ".", "_") & ".txt")
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If @error Then

    [/autoit] [autoit][/autoit] [autoit]

    Else
    GUICtrlSetData($Input3, $var)
    EndIf
    EndFunc ;==>Button3Click

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Button1Click()
    If GUICtrlRead($Input1) <> "" Then
    Global $IP = StringReplace(GUICtrlRead($Input1), ".", "_")
    If GUICtrlRead($Input3) = "" Then
    Global $logfile = $IP & ".txt"
    Else
    Global $logfile = GUICtrlRead($Input3)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $IPAdresse = GUICtrlRead($Input1)
    $ping = Ping($IPAdresse, 1800)
    _FileWriteLog($logfile, '----- ' & 'STARTED' & ' -----')
    _FileWriteLog($logfile, $IPAdresse & ' | ' & $ping)
    $pingCopy = $ping

    [/autoit] [autoit][/autoit] [autoit]

    AdlibRegister('_Zyklus', GUICtrlRead($Input2 * 1000))
    GUICtrlSetState($Button1, $GUI_DISABLE)
    GUICtrlSetState($Button2, $GUI_ENABLE)
    GUICtrlSetState($Button3, $GUI_DISABLE)
    GUICtrlSetState($Button4, $GUI_DISABLE)
    GUICtrlSetState($Input1, $GUI_DISABLE)
    GUICtrlSetState($Input2, $GUI_DISABLE)
    GUICtrlSetState($Input3, $GUI_DISABLE)
    Else
    MsgBox(16, "Missing Input", "Be sure to set the host to ping and an intervall!")
    EndIf
    EndFunc ;==>Button1Click

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Button2Click()
    _FileWriteLog($logfile, '----- ' & 'STOPPED' & ' -----')
    $stopped = 2
    AdlibUnRegister()
    GUICtrlSetState($Button1, $GUI_ENABLE)
    GUICtrlSetState($Button2, $GUI_DISABLE)
    GUICtrlSetState($Button3, $GUI_ENABLE)
    GUICtrlSetState($Button4, $GUI_ENABLE)
    GUICtrlSetState($Input1, $GUI_ENABLE)
    GUICtrlSetState($Input2, $GUI_ENABLE)
    GUICtrlSetState($Input3, $GUI_ENABLE)
    EndFunc ;==>Button2Click

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Zyklus()
    Local $IPAdresse = GUICtrlRead($Input1)
    $ping = Ping($IPAdresse)
    $stopped = 1
    ;~ If $ping <> $pingCopy Then _FileWriteLog($logfile, $IPAdresse & ' | ' & $ping)
    If $ping = 0 Then _FileWriteLog($logfile, $IPAdresse & ' | Host nicht erreichbar')
    $pingCopy = $ping
    EndFunc ;==>_Zyklus

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Form1_1Close()
    If $stopped = 1 Then
    _FileWriteLog($logfile, '----- ' & 'STOPPED' & ' -----')
    Else

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Exit
    EndFunc ;==>Form1_1Close

    [/autoit]

    Damit sollte es klappen :)

    21 is only half the truth.

  • man dankt :)

    kann man das auch übersichtlicher ausgeben lassen?

    also zb offline von bis:

    Code
    online
    192.168.0.63 | Host nicht erreichbar | 2012-06-06 09:54:00 bis 2012-06-06 09:56:00
    online oder trennzeichen ---------------------
    192.168.0.63 | Host nicht erreichbar | 2012-06-06 09:58:00 bis 2012-06-06 09:59:00

    irgendwie so :D

  • Dann müsstest du aber jeden Host alle x Sekunden anpingen und Datum + Uhrzeit speichern, wenn der Computer das erste Mal offline ist und wenn er dann das erste Mal wieder erreichbar ist.
    Wenn mein PC z.B. die ganze Nacht aus ist, bräuchte dein Skript dann bis zum nächsten Morgen um dir zu sagen, dass er überhaupt offline war.

  • okay... hmm
    wie könnte man es sonst ein wenig übersichtlicher gestalten?

    kann man noch zusätzlich zur log ein popup (msgbox) aufblinken/-poppen lassen sobalt er offline geht

    kompliziert, kompliziert ... :wacko:

  • zum Beispiel so:

    Code
    2012/06/06 10:00:00 : 173.194.35.133 is now offline.
    2012/06/06 13:37:42 : 173.194.35.133 is now online.

    Da müsste mit einem Teil meiner Erklärung von oben machbar sein.

  • Warum eigentlich nicht einfach so?

    Spoiler anzeigen
    [autoit]

    Global $Online = False, $IP = '127.0.0.1', $Intervall = 30, $Log_Path = @ScriptDir&'\'&$IP&'.txt'

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $Timer = TimerInit()
    $Ping = Ping($IP)
    If $Ping > 0 Then
    If $Online = False Then
    $Online = True
    FileWrite($Log_Path,'[ '&@MDAY&'/'&@MON&'/'&@YEAR&' | '&@HOUR&':'&@MIN&':'&@SEC&' ]'&$IP&' is online now!'&@CRLF)
    TrayTip('',$IP&' is online now!',10,1)
    EndIf
    Else
    If $Online = True Then
    $Online = False
    FileWrite($Log_Path,'[ '&@MDAY&'/'&@MON&'/'&@YEAR&' | '&@HOUR&':'&@MIN&':'&@SEC&' ]'&$IP&' is offline now!'&@CRLF)
    TrayTip('',$IP&' is offline now!',10,2)
    EndIf
    EndIf
    Do
    Sleep(1000)
    Until TimerDiff($Timer) >= ($Intervall*1000)
    WEnd

    [/autoit]

    LG
    Christoph :)

    Einmal editiert, zuletzt von BinDannMalWeg (6. Juni 2012 um 16:59)

  • Entweder mehrere Instanzen starten. (Vielleicht mit IP als Parameter... ;) )
    Oder mein Script so umschreiben, dass die Main-Schleife ein Array abarbeitet, in dem dann immer IP und Status abgespeichert werden...

    LG
    Christoph :)