Pull to refresh

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

Reading time 3 min
Views 14K
Началось все с того, что в один прекрасный день я стал обладателем 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 у меня выдает модем привходе через телнет, вы можете изменить ее на ту, которая соответствует вашему модему.

Вот и все собственно. Исправления и дополнения приветствуются.
Tags:
Hubs:
+26
Comments 65
Comments Comments 65

Articles