ppp Verbindung überwachen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
oldfellow
User
Beiträge: 5
Registriert: Montag 29. Oktober 2007, 22:20

Hallo zusammen,

ich habe vor eine ppp-Verbindung zu überwachen. Und zwar möchte ich prüfen ob der Server noch antwortet.
Ich öffne die Verbindung mittels

Code: Alles auswählen

/usr/sbin/pppd /dev/modem 115200 connect "/usr/sbin/chat ..."
Zunächst wollte ich den Process "pppd" überwachen, dieser wird jedoch nicht beendet wenn z.b. das Modemkabel entfernt wurde.

Nun möchte ich zyklisch den Server anpingen, da die IP bzw. der Host-Name statisch sind. Nur weiß ich nicht wie ich den ping befehl auswerten kann.
Oder gibt es eine elegantere Methode?

Vielen Dank!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

oldfellow hat geschrieben:Nun möchte ich zyklisch den Server anpingen, da die IP bzw. der Host-Name statisch sind.
Hallo oldfellow!

Es gibt immer einen irgendwie eleganteren Weg. Aber meist genügt es, wenn man von Python aus auf vorhandene Kommandozeilenprogramme, wie z.B. ping, zugreift und die Ausgabe auswertet.

Wenn du dir die Ausgaben von ping ansiehst, dann findest du sicher schnell raus, was bei einem erfolgreichen Ping anders ist als bei nicht erfolgreichen Pings.

Code: Alles auswählen

gps ~ # ping -c1 halvar.at
PING halvar.at (88.198.133.12) 56(84) bytes of data.
64 bytes from static.88-198-133-12.clients.your-server.de (88.198.133.12): icmp_seq=1 ttl=55 time=35.7 ms

--- halvar.at ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 35.771/35.771/35.771/0.000 ms
gps ~ # ping -c1 halvar.att
ping: unknown host halvar.att
gps ~ # ping -c1 www.tirol.com
PING www.tirol.com (194.232.15.221) 56(84) bytes of data.

--- www.tirol.com ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

gps ~ #
Man könnte also im Ergebnis nach "1 received" suchen und weiß damit, ob der Ping OK war oder nicht.

Und so kannst du das in Python abfragen:

Code: Alles auswählen

#!/usr/bin/env python

import subprocess

args = ["/bin/ping", "-c1", "halvar.at"]
proc = subprocess.Popen(args, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
retval = proc.stdout.read()
if "1 received" in retval:
    print "Verbunden"
else:
    print "Nicht verbunden"
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das geht noch einfacher. Das in Linux genutzte `ping` gibt als Rückgabewert logischerweise `0` bei Erfolg aus. Wenn ich hingegen einen nicht-existierenden Host anpinge, bekomme ich `2` als Rückgabewert. Reicht also den zu verarbeiten.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Jona
User
Beiträge: 94
Registriert: Sonntag 23. September 2007, 23:25

das in windows (natürlich) auch der fall:

Code: Alles auswählen

C:>ping python-forum.de -n 1

Ping python-forum.de [88.198.5.85] mit 32 Bytes Daten:

Antwort von 88.198.5.85: Bytes=32 Zeit=18ms TTL=55

Ping-Statistik für 88.198.5.85:
    Pakete: Gesendet = 1, Empfangen = 1, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 18ms, Maximum = 18ms, Mittelwert = 18ms

C:>@echo %errorlevel%
0

C:>ping 123.123.123.123 -n 1

Ping wird ausgeführt für 123.123.123.123 mit 32 Bytes Daten:

Zeitüberschreitung der Anforderung.

Ping-Statistik für 123.123.123.123:
    Pakete: Gesendet = 1, Empfangen = 0, Verloren = 1 (100% Verlust),

C:>@echo %errorlevel%
1

Antworten