Lan Verbindung zum Internet wiederherstellen ?

Du hast eine Idee für ein Projekt?
Antworten
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

Hallo , wollte mal fragen ob man es irgendwie realisieren kann , dass man die Lan/Netzwerkverbindung wiederherstellen kann , wenn sie mal abgebrochen ist .
Also genauer gesagt , es passiert manchmal das die Verbindung über einen Router zum Internet abbricht . Dann muss ich den Router aus und wieder einschalten und dann gehts wieder .
kann man das Softwaremässig machen . Also ein kleines Python-programm das im hintergrund läuft und alle 5 min oder so die internetverbindung abfragt und wenn sie weg ist , dann .............. ??

Gruß
Benutzeravatar
beewee
User
Beiträge: 35
Registriert: Mittwoch 18. Januar 2006, 22:16

Hi,

ist das in etwa was du willst?

Code: Alles auswählen

#! /usr/bin/env python

import urllib2
from os import system

try:
    urllib2.urlopen("http://google.de")
except ValueError:
    system("Befehl zum Neuverbinden")
das kannst du dann halt per cron alle 5 Minuten ausführen lassen

BeeWee
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Das ist etwas zuviel des Guten. Ich würde keine HTTP-Verbindung aufbauen lassen, ein socket.gethostbyname("google.de") reicht meiner Meinung nach auch.
Zuletzt geändert von birkenfeld am Sonntag 17. Dezember 2006, 20:21, insgesamt 1-mal geändert.
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

hi , ja das ist schonmal nicht schlecht .

Aber wie per cron ? kenn ich nicht .

alle 5 Minuten ausführen lassen, wollte ich dann vielleicht mit gmtime oder ähnliches machen, also mit modul time.

So , aber Befehl zum Neuverbinden ist das entscheidene.
Ansonsten wenn es nicht geht , muss ich dann wenigstens ein Hinweis (blickendes Fenster) programmieren .

Ich kenn zwar das Modul os aber system kenn ich nicht und daher weiß ich auch nicht wie ich dann system('Befehl zum neuverbinden ') realisieren kann.
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi Torsten,

ich kenne mich noch nicht so gut mit Netzwerken aus, aber Beewee hat die Funktion system aus dem os-Modul importiert. Damit kann man Befehle in derselben Shell ausführen, in der der Pythonprozess läuft. Beispielsweise

Code: Alles auswählen

system("dir *.py")     ##  windows
system("ls *.py")      ##  UNIX
Als Argument gibst Du dann das Programm/Script an, das Deine Verbindung aufbaut. :-)

Über cron jobs kannst Du Dein (nur UNIX?-)Sytem anweisen, zu einem bestimmten Zeitpunkt einen Befehl oder Script auszuführen. Das ist in sofern anders, als dass der Scriptprozess nicht die ganze Zeit im Hintergrund läuft.

Wenn Dir das nichts ausmacht, empfehle ich Dir:

Code: Alles auswählen

time.sleep(60)    ##  Prozess 60 Sekunden schlafen legen
Mit dieser Funktion legst Du den ganzen Prozess auf Eis, so dass er fast keine Performance kostet.

Grüße,
der Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

Michael Schneider hat geschrieben: Über cron jobs kannst Du Dein (nur UNIX?-)Sytem anweisen, zu einem bestimmten Zeitpunkt einen Befehl oder Script auszuführen. Das ist in sofern anders, als dass der Scriptprozess nicht die ganze Zeit im Hintergrund läuft.

Wenn Dir das nichts ausmacht, empfehle ich Dir:

Code: Alles auswählen

time.sleep(60)    ##  Prozess 60 Sekunden schlafen legen
Mit dieser Funktion legst Du den ganzen Prozess auf Eis, so dass er fast keine Performance kostet.
Hallo ,
time.sleep(60) gefällt mir ;
mit 'system' hab ich noch nicht verstanden , die Wiederverbindung soll ja in denselben skribt ausgeführt werden ...
Nur gibt es denn Befehle dafür einen Router ein- und auszuschalten oder ähnliches wie neue ip zuzuweisen ?
Danke erstmal
guter_hund
User
Beiträge: 19
Registriert: Montag 4. Dezember 2006, 13:25

hey leute. Bei mir funktioniert das script nicht. google.de wird garnicht erst aufgerufen...

Bitte um Hilfe...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

guter_hund hat geschrieben:Bei mir funktioniert das script nicht. google.de wird garnicht erst aufgerufen...
Fehlermeldung? Quellcode? Dann gucken wir weiter.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
bennym
User
Beiträge: 36
Registriert: Freitag 13. Oktober 2006, 21:17
Kontaktdaten:

Hi Torsten2005
Hast du Windows oder Linux? Unter Windows regelt das soweit ich weis der Befehl "ipconfig /all". Gibs mal in der Windows Befehlszeile ein und kuck obs funzt.

Wenns Plattform uebergreifend sein soll wuerde ich es so probieren:

Code: Alles auswählen

import os
if os.name != 'posix': 	#posix = Unix
	os.system('ipconfig /all') #oder /renew oder /RELEASE

else:
	# NIC runterfahren
	os.system('sudo ifconfig eth0 down') # wird dann nach passwort fragen

	# NIC hochfahren
	os.system('sudo ifconfig eth0 up') 

	os.system('sudo dhclient eth0')


Mit der ipconfig syntax hab ich mich noch nicht richtig auseinandergesetzt, probier aus, ob /all funktioniert.
Unter Linux muss sudo installiert sein, ansonsten musst du das Script als root starten (mit su). Dazu brauchst du noch unter linux das paket dhclient.

mfg benny
lunar

bennym hat geschrieben:Hi Torsten2005
Hast du Windows oder Linux? Unter Windows regelt das soweit ich weis der Befehl "ipconfig /all". Gibs mal in der Windows Befehlszeile ein und kuck obs funzt.

Wenns Plattform uebergreifend sein soll wuerde ich es so probieren:

Code: Alles auswählen

import os
if os.name != 'posix': 	#posix = Unix
	os.system('ipconfig /all') #oder /renew oder /RELEASE

else:
	# NIC runterfahren
	os.system('sudo ifconfig eth0 down') # wird dann nach passwort fragen

	# NIC hochfahren
	os.system('sudo ifconfig eth0 up') 

	os.system('sudo dhclient eth0')


Mit der ipconfig syntax hab ich mich noch nicht richtig auseinandergesetzt, probier aus, ob /all funktioniert.
Unter Linux muss sudo installiert sein, ansonsten musst du das Script als root starten (mit su). Dazu brauchst du noch unter linux das paket dhclient.
Wenn cron zum Starten des Skripts verwendet wird, ist "sudo" in der Regel überflüssig; cron startet Jobs mit root-Rechten.
Zum aktivieren/deaktivieren würde ich außerdem eher "ifup" und "ifdown" verwenden, da diese Programme die Einstellungen in /etc/network/interfaces beachten.
Crush
User
Beiträge: 44
Registriert: Montag 1. Mai 2006, 11:32

lunar hat geschrieben:Wenn cron zum Starten des Skripts verwendet wird, ist "sudo" in der Regel überflüssig; cron startet Jobs mit root-Rechten.
Zum aktivieren/deaktivieren würde ich außerdem eher "ifup" und "ifdown" verwenden, da diese Programme die Einstellungen in /etc/network/interfaces beachten.
Naja, so stimmt das auch nicht. In der /etc/crontab gibt es ein Feld "user", wo man festlegen kann, unter welchem user das Kommando ausgeführt werden soll. Hier sind auch "normale" user möglich. Die crontab's, die man mit "crontab -e" editiert werden dann unter dem jeweiligen user ausgeführt. :)

Crush
Antworten