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)

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

Kommentar verfassen