Seite 1 von 1

DSL-Router online?

Verfasst: Dienstag 28. November 2006, 01:12
von HWK
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

Verfasst: Dienstag 28. November 2006, 12:43
von Y0Gi
Eine einfache, aber indirekte und nicht exakt zuverlässige Möglichkeit besteht darin, einen Host im Internet zu kontaktieren.

Verfasst: Dienstag 28. November 2006, 13:24
von HWK
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

Verfasst: Dienstag 28. November 2006, 13:53
von gerold
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
:-)

Verfasst: Dienstag 28. November 2006, 14:18
von HWK
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

Verfasst: Dienstag 28. November 2006, 14:53
von BlackJack
Dann wirst Du wohl auch den Router irgendwie befragen müssen. Hat der ein Webinterface das man ansprechen kann?

Verfasst: Dienstag 28. November 2006, 15:51
von Blattlaus
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.

Verfasst: Dienstag 28. November 2006, 18:34
von dev
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

Verfasst: Dienstag 28. November 2006, 21:31
von Y0Gi
Stimmt, eine Abfrage per UPnP dürfte eine realistische Möglichkeit sein - wenn man es denn aus Sicherheitsgrunden nicht lieber deaktiviert hat.

Verfasst: Dienstag 28. November 2006, 22:14
von HWK
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

Verfasst: Dienstag 28. November 2006, 22:41
von HWK
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