ADSL модем теряет коннект до перезагрузки? Не проблема!

16:06

Началось все с того, что в один прекрасный день я стал обладателем ADSL-роутера D-Link 2640U. Так как раздаю я интернет еще и друзьям, то включен он у меня круглосуточно, и тут обнаружилась одна досадная неприятность — он переодически терял коннект с провайдером и не хотел подключаться до перезагрузки. Поиски и обновления прошивки не решили проблемы, а так как дома меня иногда не бывает, а перегружать модем надо, то в один прекрасный день был написан скрипт, который делает это автоматически.

 

Выбор пал на Питон чисто случайно — начал изучать язык и решил попрактиковаться. Вот что из этого вышло:

import os
import re
import time
import sys
import telnetlib
from threading import Thread
 
class testit(Thread):
def __init__ (self,ip):
Thread.__init__(self)
self.ip = ip
self.status = -1
def run(self):
pingaling = os.popen("ping -q -c2 "+self.ip,"r")
while 1:
line = pingaling.readline()
if not line: break
igot = re.findall(testit.lifeline,line)
if igot:
self.status = int(igot[0])
if self.status == 0:
tn = telnetlib.Telnet(HOST)
tn.read_until("BCM96338 ADSL Router")
tn.read_until("Login:")
tn.write(user + "\n")
tn.read_until("Password: ")
tn.write(password + "\n")
time.sleep(5)
#tn.write("ifconfig ppp_0_1_32_1\n")
tn.write("reboot\n")
time.sleep(5)
tn.write("logout\n")
time.sleep(60)
 
testit.lifeline = re.compile(r"(\d) received")
 
ip = "213.180.204.8"
HOST = "192.168.168.1"
user = 'user'
password = 'password'
 
current = testit(ip)
current.start()

Скрипт пингует заданный айпи адрес и, если тот недоступен, заходит по телнету на модем и отдает команду для перезагрузки.

Стоит у меня запуск по крону каждые 3 минуты (подобрано опытным путем — самый оптимальный вариант)

 

ip-адрес, который надо проверять.

HOST — адрес модема.

user, password — соответственно, имя и пароль пользователя на модеме.

строчку BCM96338 ADSL Router у меня выдает модем привходе через телнет, вы можете изменить ее на ту, которая соответствует вашему модему.

 

Вот и все собственно. Исправления и дополнения приветствуются.

Ссылка