Ping funktioniert in AutoIt nicht zuverlässig. In der CMD aber problemlos.

  • Hey, habe hier wieder ein sehr merkwürdiges Problem.

    Möchte im Netzwerk mit AutoIt schnellstmöglich prüfen ob ein Client erreichbar ist. Am schnellsten geht das wohl mit der integrierten Funktion Ping()
    Doch irgendwie bekomme ich immer ein Fehler zurück obwohl das pingen über die CMD problemlos klappt.


    Jemand ne Idee woran das liegen kann? Habe Firewall auch testeshalber mal deaktiviert.

  • Wie ist das Netzwerk denn aufgebaut und um was für eine Art Client reden wir denn hier? Ein paar mehr Informationen dazu könnten nicht schaden.

    Mal abgesehen davon macht es absolut keinen Sinn deine private IPv4-Adresse in den Screenshot halb zu verdecken. Die ist von Außen sowieso nicht ermittelbar (sprich: Keine Informationen herleitbar), deswegen ist es ja auch eine private IPv4-Adresse. Brauchst dir also gar nicht die Mühe machen. ^^

    €dit: Alternativ wenn die Ping Funktion weiterhin Probleme verursacht aber von der CMD aus keine Probleme gibt, dann führ via Run / RunWait den Ping von der Konsole aus.

    Einmal editiert, zuletzt von Yjuq (27. Juni 2017 um 22:19)

  • Funktioniert bei mir problemlos. :) Wo wir schon bei Anonymität sind: Ping liegt zwischen 0 und 69. ;)
    Wäre natürlich auch hilfreich, wenn man wüsste, welcher Fehler das nun ist.

  • Wie ist das Netzwerk denn aufgebaut und um was für eine Art Client reden wir denn hier?


    Moin, es handelt sich um ein Firmennetzwerk. Die Clients sind also normale Arbeits-PC/NB's die ihre IP vom DHCP-Server bekommen.

    Alternativ wenn die Ping Funktion weiterhin Probleme verursacht aber von der CMD aus keine Probleme gibt, dann führ via Run / RunWait den Ping von der Konsole aus.

    Das wäre eine super Lösung wenn du mir verrätst wie ich darüber die Abfrage realisieren kann ob der Ping erfolgreich war. ;)

    Wäre natürlich auch hilfreich, wenn man wüsste, welcher Fehler das nun ist.

    Tja das wüsste ich auch gern, bzw. viel mehr wodurch er verursacht wird. Als Error-Code gibt die Ping-Funktion folgendes wieder: 2 = Host is unreachable

  • Das wäre eine super Lösung wenn du mir verrätst wie ich darüber die Abfrage realisieren kann ob der Ping erfolgreich war.

    Du kannst die Ausgabe der CMD in eine Datei umleiten mit >> dump.txt.
    Folglich musst du also nur die CMD so aufrufen Run(@ComSpec & " /c ""PING 127.0.0.1 >> dump.txt"") und die Datei sollte in deinem Working Directory liegen.
    Anschließend FileReaden und mit Stringfunktionen abfragen oooder du liest direkt die CMD mit StdoutRead.

  • Hallo @chrisbyRRC,

    ich würde es lieber mit einer Änderung deiner Funktion versuchen. Ich hatte auch schon Probleme mit einem Ping. Bei mehreren Versuchen, hat es bei mir aber noch immer geklappt.
    Daher versuche es mal mit dieser Variante, wo maximal drei Pings gesendet werden, bis einer positiv war. Wenn keiner positiv war, gilt eben offline.


    EDIT: Falls das hier nicht aus anderen Gründen drin stand: Für dieses Skript brauchst du sicher kein #RequireAdmin.

    Grüße autoiter

    Einmal editiert, zuletzt von autoiter (28. Juni 2017 um 14:00)

    • Offizieller Beitrag

    Hast Du es schonmal mit NetServerEnum versucht:

  • @alpines
    Stimmt, StdoutRead ist ein guter Lösungsansatz! Müsste ich nur noch schauen wie performant das ganze im Endeffekt wird. :rolleyes: Funktionell wird das sicherlich 1A funktionieren, Danke!

    @autoiter
    Leider ist ein Client sehr sporadisch mal nicht über Ping() erreichbar, da ändert sich dann aber auch für ca. 20min. nichts dran, egal wie oft ich die Funktion wiederhole.

    @Oscar
    Ist "NetServerEnum" denn überhaupt Remote -anwendbar? Wenn ja würde ich das auch gerne mal unter die Lupe nehmen. Wie wäre denn so ein Aufruf für den Online-Status, das _arrayDisplay() gibt mir nix aus. ?(

    Aber wirklich vielen Dank an alle das ihr mich so sehr unterstützt, das wird mir sehr weiterhelfen! :thumbup:

    • Offizieller Beitrag

    Sind das eigentlich alles Windows-PCs mit Datei- und Druckerfreigabe?
    Dann könnte man mit einem Portscan auf den IP-Bereich die entsprechenden Rechner finden:

  • Als Alternative: Ich habe mir zum privaten Spaß mal ein eigenes ping geschrieben - genannt pinz - ich wollte was mit grafischer Laufzeitanzeige.
    Das Script nutzt eine alternative Ping Methode _PingLikeMicrosoft() bei der man den Payload bestimmen kann (Ich hatte versucht alle Parameter des Original ping-Befehls umzusetzen.

    Kompiliert sich als CUI dann einfach wie Ping nutzen (statt dessen halt pinz.exe nutzen). Der Code ist "etwas" unordentlich da ich zum testen damals alles ziemlich zusammenkopiert habe ... und es dann in der Schublade verschwunden ist.
    Aber vielleicht hilft es dir.


    Überall wo ich mir den Code von extern zusammenkopiert habe sind die Original Links drin, bekannte Namen aus diesem Forum sind auch dabei.
    Warum auch immer gab es ein Problem beim anpingen des Localhost, nur dann wird das Interne Ping von AutoIt genutzt, ansonsten das _PingLikeMicrosoft()

    [Blockierte Grafik: https://znil.net/images/c/c8/ClipCapIt-170628-163755.PNG]

    Eventuell löst das ja dein Problem und du kannst dir die passenden Infos aus dem Skript rauskopieren.
    Das Skript gibt übrigens auch einen korrekten %ERRORCODE% zurück, mit dem original Ping hatte ich da auch mal meine Probleme in einem Batch-Skript.


    Gruß,
    BLinz

  • Sind das eigentlich alles Windows-PCs mit Datei- und Druckerfreigabe?
    Dann könnte man mit einem Portscan auf den IP-Bereich die entsprechenden Rechner finden

    Auch ne gute Idee! Aber da DHCP zum Einsatz kommt würde ich lieber mit dem Hostname die Abfrage realisieren. Und ein kompletter Port-Scan im gesamten Netz würde wahrscheinlich auch lange brauchen, oder?

    @BLinz
    Cooles Programm, da werde ich bestimmt auch noch was interessantes finden!

    Vielen Dank Euch!

  • C:\pinz.exe znil.net -t

    PingZ-Statistik für...

    Da kann sich wohl jemand nicht entscheiden, wie er sein Tool benennen soll... :P

    In der Tat habe ich das Ding mehrmals umbenannt ... am Anfang war es ping+, irgendwann pingz und schließlich pinz.
    Ich finde das manchmal gar nicht so einfach dem Ding einen passenden, eindeutigen Namen zu geben ...

  • Ich finde das manchmal gar nicht so einfach dem Ding einen passenden, eindeutigen Namen zu geben ...

    Ich handhabe das meistens so, dass meine Funktionen einfach durchnummeriert werden:

    _0001()
    _0002()
    _0003()

    Nie wieder über lästige Funktionsnamen nachdenken!

  • Ich handhabe das meistens so, dass meine Funktionen einfach durchnummeriert werden:
    _0001()
    _0002()
    _0003()

    Nie wieder über lästige Funktionsnamen nachdenken!

    Du nutzt mehrere Funktionen? Anfänger! Eine einzige Funktion die unterschiedliche Parameter akzeptiert und daraufhin unterschiedliche Befehle ausführt ist viel besser vom Coding-Stil her.