Ping gibt falschen Wert zurück

  • Hallo
    die Funktion Ping gibt mir kein @error zurück, obwohl das Netzwerkkabel entfernt ist.

    [autoit]

    $IPCon = "192.168.1.1"
    $ping = Ping($IPCon, 400)
    MsgBox($IPCon, ":" & $IPCon &":")
    if $ping <= 0 OR @error Then
    MsgBox(0, "", "false")
    Else
    MsgBox(0, "", "true")
    EndIf

    [/autoit]

    PS: über cmd kommt so wie es sein soll ein Fehler.

  • [autoit]

    $IPCon = "192.168.1.1"
    $ping = Ping($IPCon, 400)
    if $ping <= 0 OR @error Then
    MsgBox($IPCon, ":" & $IPCon &":")
    MsgBox(0, "", "false")
    Else
    MsgBox($IPCon, ":" & $IPCon &":")
    MsgBox(0, "", "true")
    EndIf

    [/autoit]


    So geht's ;)

    [autoit]

    If ProcessExists("Sig.exe") Then
    ConsoleWrite("@@ mfg")
    Else
    ConsoleWrite("!! -no sig-")
    EndIf

    [/autoit]
  • Und klappt immer noch nicht.
    Egal ich habe mir meine eigene Ping Funktion geschrieben.
    Meine fragt im Hintergrund über die cmd den Status ab.
    Ist sicherer ;)

  • Natürlich nicht...

    [autoit]

    MsgBox($IPCon, ":" & $IPCon &":")

    [/autoit]


    Ist kein gültiger Befehl.. ;)
    Der Flag-Parameter fehlt

    [autoit]

    If ProcessExists("Sig.exe") Then
    ConsoleWrite("@@ mfg")
    Else
    ConsoleWrite("!! -no sig-")
    EndIf

    [/autoit]
  • Joa der erste Parameter fehlt.
    Das ist aber nicht der Fehler, habe den letzten Teil mit der msgbox nicht in meinem Script, wollte nur für Demozwecken einfügen.

    Ich kann zu 99% sagen, dass der Befehl einen falschen Rückgabewert hatte.
    Genau dieses Problem wurde von anderen Usern in anderen Foren beschrieben.
    Es geht mir nur um diese Zeile/n der Rest hat mit dem Problem nichts zu tun.

    [autoit]

    $IPCon = "192.168.1.1"
    $ping = Ping($IPCon, 400)

    [/autoit]


    Wie bereis erwähnt lasse ich das nun über die CMD laufen funktioniert einwandfrei.
    Falls jemand das gleiche Problem haben sollte schreibt mich einfach an. :)

  • Das liegt nicht an Ping.

    [autoit]

    $IPCon = "192.168.1.1"
    $ping = Ping($IPCon, 400)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : Ping($IPCon, 400) = ' & Ping($IPCon, 400) & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit]

    Gibt bei mir folgendes aus:

    Zitat

    @@ Debug(15) : Ping($IPCon, 400) = 0
    >Error code: 4


    Also alles so wie es sein soll.
    Verstehe dein Problem grad nicht

    [autoit]

    If ProcessExists("Sig.exe") Then
    ConsoleWrite("@@ mfg")
    Else
    ConsoleWrite("!! -no sig-")
    EndIf

    [/autoit]
  • Nun gut ich möchte hier keine Diskussion anfangen.
    In der virtuellen Maschine hat es nicht geklappt und auf dem normalen System schon, von daher sehe ich meine Aussage "Ping gibt falschen Wert zurück", als korrekt an.
    Wie bereits gesagt habe ich auf beiden OS das selbe Skript benutzt.
    Danke nochmals.

  • Also bei mir funktioniert das. Ich bekomme true bei einer IP mit der ich auch verbunden bin. Und false für eine x-beliebige, mit welcher ich nicht verbunden bin.

    [autoit]

    $IPCon = "192.168.0.1"
    $ping = Ping($IPCon, 400)
    If $ping <= 0 Or @error Then
    MsgBox(0, "", "false")
    Else
    MsgBox(0, "", "true")
    EndIf

    [/autoit]
  • @m-obi
    Haben Sie den vorherigen Post richtig durch gelesen?
    Es ist ein sporadischer Fehler.
    Der Exakt selbe Code funktioniert auf den einen Rechner tadelos und auf einen anderen eben nicht.

  • Das liegt dennoch nicht am Ping, eventuell bekommt das Script von "irgendwo" eben doch eine Antwort, und gerade da es eine VM ist wäre ich mir nie sicher ob die tatsächlich vom Netz ist..
    Teste es doch mal mit einer fiktiven IP, ob du da auch noch "True" zurück bekommst, falls ja liegt es an irgendwelchen Zugriffsrechten; falls nicht ist die VM wohl doch noch mit 192.168.1.1 verbunden

    mfg

    [autoit]

    If ProcessExists("Sig.exe") Then
    ConsoleWrite("@@ mfg")
    Else
    ConsoleWrite("!! -no sig-")
    EndIf

    [/autoit]
  • Selbe Ausgangsposition:
    CMD meldet Ping Fehler Zielhost nicht erreichbar.
    Autoit Ping Funktion meldet 1 = also verbunden.

    Für mich ist das Fakt das die Funktion Ping einen Bug hat, mag ja sein ob es wegen der VM ist, aber die CMD funktioniert einwandfrei.

    @m-obi
    Danke für das Du, du kannst mich natürlich auch dutzen.

    PS: ich habe auf keinen Fall einen Fehler im Skript gehabt. ;)

  • Hier mal ein Beispiel für eine Funktion, die CMD zum Testen der Verbindung nutzt. Vielleicht kannst du die ja gebrauchen.
    (Auch nützlich, wenn man feststellen möchte, ob das kompilierte Programm durch eine Firewall geblockt wird)

    _IsConnectedExternal
    [autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _IsConnectedExternal
    ; Description ...: Checks if a connection is available on PC using "ping.exe". It doesn't depend on the (compiled) AutoIt script.
    ; You can use this e.g. to find out if a firewall blocks the AutoIt program.
    ; Syntax.........: _IsConnectedExternal($sHost = 'google.com', $sTempFile = 'isconnected.tmp')
    ; Parameters ....: $sHost - A solid host that is online around the clock (Default: google.com)
    ; Return values .: Success : Returns 1 (if external connection test was successful)
    ; Failure : Returns 0 (if external connection test failed)
    ; Author ........: Cyrox (@AutoIt.de)
    ; ===============================================================================================================================

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

    Func _IsConnectedExternal($sHost = 'google.com')
    Local $sResult, $sTempPath = @TempDir & '\isconnected.tmp'
    RunWait('ping.exe /n 1 ' & $sHost & ' >"' & $sTempPath & '"', '', @SW_HIDE)
    $sResult = FileRead($sTempPath)
    FileDelete($sTempPath)
    If StringInStr($sResult, '%') Then Return 1
    Return 0
    EndFunc

    [/autoit]
    Beispiel
    [autoit]

    ; _IsConnectedExternal
    ; ===== E X A M P L E =====

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

    #include "_IsConnectedExternal.au3"

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

    $sRead = InetRead('http://www.autoitscript.com/autoit3/files/beta/update.dat', 1)
    If @error Then
    If _IsConnectedExternal() Then
    MsgBox(16, 'Error', 'Firewall forbids "' & @ScriptName & '" the internet access.')
    Else
    MsgBox(16, 'Error', 'No connection available.')
    EndIf
    Else
    MsgBox(64, 'Connection OK - Current AutoIt version:', BinaryToString($sRead))
    EndIf

    [/autoit]

    2 Mal editiert, zuletzt von CyRoX (29. November 2012 um 16:41)