Seite 1 von 1
ppp Verbindung überwachen
Verfasst: Montag 5. November 2007, 10:44
von oldfellow
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!
Re: ppp Verbindung überwachen
Verfasst: Montag 5. November 2007, 10:57
von gerold
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

Verfasst: Montag 5. November 2007, 18:41
von Leonidas
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.
Verfasst: Mittwoch 7. November 2007, 13:11
von Jona
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