DSL-Router online?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Wie kann ich in einem Script feststellen, ob eine Verbindung mit dem Internet besteht, d.h. ob der DSL-Router online ist. Bisher habe ich für eine DFÜ-Verbindung dazu EnumConnections aus win32ras verwendet.
Ich verwende also Windows XP mit Python 2.4.2.
Danke
HWK
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Eine einfache, aber indirekte und nicht exakt zuverlässige Möglichkeit besteht darin, einen Host im Internet zu kontaktieren.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Meinen Router habe ich aber so eingestellt, dass er sich automatisch bei Bedarf einwählt. Mein Script soll seine Aufgaben jedoch nur erledigen, wenn eine Internetverbindung bereits von einem anderen Programm hergestellt wurde.
MfG
HWK
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

HWK hat geschrieben:Meinen Router habe ich aber so eingestellt, dass er sich automatisch bei Bedarf einwählt.
Hi HWK!

Es gibt viele Router, die man mit Telnet bedienen kann. Dann müsstest du dirch nur per ``telnetlib`` zum Router verbinden, die Seite mit den Statusinformationen aufrufen und analysieren.

Es gibt viel mehr Router, die nur mehr per HTTP bedienbar sind. Du könntest per ``urllib2`` die entsprechende HTML-Seite des Routers öffnen und die Rückgabe analysieren.

Da hilft nur ein bischen probieren.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Hie, Gerold!
Das klingt gut. Ich hatte schon dran gedacht mich per socket oder urllib2 mit dem Router zu verbinden, um festzustellen, ob er eingeschaltet ist. Die Idee dann auch gleich die Statusseite zu analysieren, um zu sehen, ob eine Internet-Verbindung besteht, ist natürlich noch besser. Das werde ich demnächst ausprobieren.
Danke
HWK
BlackJack

Dann wirst Du wohl auch den Router irgendwie befragen müssen. Hat der ein Webinterface das man ansprechen kann?
Benutzeravatar
Blattlaus
User
Beiträge: 55
Registriert: Donnerstag 24. August 2006, 08:55

Wenn du die Statusseite analysieren willst, würde ich dir zu mechanoid raten. Dann musst du dich nicht mit dem ganzen HTTP/HTML selbst rumschlagen.
Die Doku ist zwar etwas spärlich, aber eigentlich isses ganz simpel und mit den Docstringskommt man gut zurande.
dev
User
Beiträge: 49
Registriert: Montag 23. Januar 2006, 09:52
Kontaktdaten:

HWK hat geschrieben:Meinen Router habe ich aber so eingestellt, dass er sich automatisch bei Bedarf einwählt. Mein Script soll seine Aufgaben jedoch nur erledigen, wenn eine Internetverbindung bereits von einem anderen Programm hergestellt wurde.
die meisten "modernen" Router haben den UPnP InternetGatewayDevice Dienst dabei, damit solltest Du den Leitungszustand feststellen können.

Bzw. wenn es ein guter Router ist, dann kannst Du ihn vielleicht per SNMP abfragen.

Beides ist aufwendiger, wäre aber halt allgemeingültiger als z.B. 'ne html-Seite zu parsen.

Ciao,
dev
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Stimmt, eine Abfrage per UPnP dürfte eine realistische Möglichkeit sein - wenn man es denn aus Sicherheitsgrunden nicht lieber deaktiviert hat.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Vielen Dank schon mal für die vielen Antworten.
Ich hab's mal probiert. Die Statusseite lässt sich problemlos mit urllib2 einlesen. Die Daten sind zwar Java, es wird dabei aber eine Variable inet_status gesetzt, die über den Verbindungsstatus Auskunft gibt. Das scheint also ganz einfach zu klappen.
Die anderen Vorschläge klingen interessant (SNMP und UPnP InternetGatewayDevice). Ich habe davon aber keine Ahnung. Könnte mir vielleicht jemand ein paar Tips geben, wie man so etwas prinzipiell in Python umsetzt?
MfG
HWK
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Das ist meine Lösung:

Code: Alles auswählen

#!/usr/local/bin/python

from urllib2 import urlopen, URLError

URL = 'http://192.168.2.1/top_status.stm'

def CheckConnection():
    try:
        stream = urlopen(URL)
    except URLError:
        return False
    try:
        for line in stream:
            if line.startswith('var inet_status = '):
                return (line[18] == '7') # Verbindung aktiv
    except: # Ich weiss, ich weiss
        pass
    return False

if __name__=='__main__':
    print 'Internetverbindung aktiv: %s' % CheckConnection()
MfG
HWK
Antworten