Ping mit Python

Ich habe mich in den letzten Tagen mit der Möglichkeit auseinandergesetzt, Geräte im WLAN zu entdecken und daraufhin diverse Aktionen auszuführen. Eine davon ist die Methode die IP anzupingen.

Voraussetzung ist, dass das anzupingende Gerät (z.B. Smartphone) im Heimnetz eine feste IP vom Router zugewiesen bekommen hat. Der Programmieraufwand in Python ist sehr gering und auch leicht umzusetzen:

Wichtig ist zuerst der import von „os“.

import os

Dadurch können wir Befehle an die Shell senden. Und genau das machen wir nun:

ip = "localhost"
os.system("ping " + ip)

Der Einfachheit halber, wird in diesem Beispiel „localhost“ angepingt. Dieser sollte in der Regel immer antworten 😉
Führt man das Script nun aus, so erhält man folgende Ausgabe:

ping

Es wird deutlich, dass nun so lange gepingt wird, bis man das Programm mit STRG+C abbricht. Um das zu ändern, kann man an den Befehl die Anzahl der Zyklen (c) anhängen. Dies geschieht wie folgt:

os.system("ping -c 1 " + ip)

Jetzt wird der Ping genau einmal ausgeführt.

ping_c1

Um nun weiter mit dem Ergebnis des Pings zu arbeiten, schauen wir uns die Ausgabe an. Mit der Zeile:

print os.system("ping -c 1 " + ip)

sollte im Fall „localhost“ eine „0“ ausgegeben werden. Eine nicht erreichbare Adresse gibt z.B den Wert „256“ zurück.
ping_0
Also kann nun eine einfach „If-Abfrage“ gebaut werden, die eine Aktion ausführt, wenn die IP antwortet, bzw nicht antwortet:

if os.system("ping -c 1 " + ip) == 0:
    print "IP ist erreichbar"
else:
    print "IP ist NICHT erreichbar"

Ich habe die Methode z.B. angewendet damit der Pi erkennt ob ich Zuhause bin.

Handy im WLAN = Ping erfolgreich (Zuhause)
Handy NICHT im WLAN = Ping NICHT erfolgreich (Unterwegs)

8 Gedanken zu „Ping mit Python

  1. Bei mir gibt die Konsole immer nur den wert 512 aus. Egal welche Ip.
    Mein Test-code:
    import os
    Import time
    ip="localhost"

    while (True):
    os.system ("ping -c 1"+ip)
    print os.system ("ping -c 1"+ip)
    time.sleep(1)

    Weis jemand was ich falsch mache??
    LG André

  2. Hallo,

    wenn ich die IF Abfrage in mein Script einbaue bekomme ich folgende Fehlermeldung:

    SyntaxError: EOL while scanning string literal

    Was mache ich denn da falsch?

    Gruß
    Walker

  3. Hallo, der Code hat aus meiner Sicht 3 Fehler

    1. while True: —> ohne Klammer

    2. danach TAB für die folgenden 3 Zeilen wenn es nicht von der Konsole gestartet wird

    3. nach der 1 muss ein blank

    while True:

    os.system (“ping -c 1 ″+ip)

    print os.system (“ping -c 1 ″+ip)

    time.sleep(1)

  4. Habe eine ähnliche (Anfänger!) Aufgabenstellung: bei im WLAN erkannter IP soll das Script allerdings (erst mal) Ruhe geben.
    Ich möchte das Script als Türöffner nutzen: loggt sich mein Handy in mein WLAN ein, soll der elektr. Türöffner öffnen (für 1 Sek. schliessen). Bin ich dann eingeloggt (=zu Hause) soll das Script / der Türöffner natürlich gar nix machen, sondern erst, wenn ich wieder eine gewisse Zeit (hier 60 Min.) außer Haus (=ausgeloggt) bin.
    An der Definition ‚LED‘ bitte nicht stören.

    Mein Code funktioniert aber nicht (steckt sicher voller [Denk-]Fehler!).
    Bitte Denkanstösse zum Überprüfen warum da was nicht funktioniert.

    #!/usr/bin/python

    import RPi.GPIO as GPIO
    import os
    Import time
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)
    GPIO.cleanup ()
    LED = 23
    GPIO.setup(LED, GPIO.OUT)
    # setzt öffner -sicherheitshalber- auf AUS
    GPIO.output (LED, 1)

    ip=“192.168.178.XX“

    # ping alle 60 sek nach der ip
    if os.system(„ping -c 60 “ + ip) != 0:

    # wenn ip nicht gefunden wurde mache garnix bzw. lasse/schalte öffner auf AUS
    GPIO.output (LED, 1)

    else:
    # wenn ip gefunden wurde mache folgendes
    # schalte öffner für eine sek an
    GPIO.output (LED, 0)
    time.sleep (1)
    GPIO.output (LED, 1)

    # pinge dann alle 60 Min. erneut ob ip immer noch eingeloggt
    while True:
    os.system(„ping -c 3600 “ + ip) == 0:
    # mache garnix bzw. lasse/schalte öffner auf AUS
    GPIO.output (LED, 1)

Kommentar verfassen