Скрипт перезагрузки роутера при разрыве коннекта

image
Дома, как, как и у многих, интернет раздает роутер.
Купленный в свое время ZyXEL P-330W вполне справлялся со своей задачей, пока однажды не начались проблемы. Видимо провайдер что-то там у себя делал, сетка падала, а роутер оставался в полной уверенности, что все в порядке и не переподключал соединение.
Единственное, что оставалось — перегружать сам роутер путем отключения питания.
Т.к. домашний сервак работает 24/7 и интернет ему нужен постоянно, озадачился проблемой автоматической перезагрузки роутера в случае, если отрубается интернет.

ПРОБЛЕМА:
Роутер или ADSL модем теряет связь и не восстанавливает соединение.

РЕШЕНИЕ:
Использование скрипта для проверки подключения к интернет и перезагрузки роутера в случае необходимости.
Как это все будет работать – Раз в полчаса планировщик запускает скрипт, который пингует определенные адреса и если ответа нет, заходит на роутер через телнет и отправляет команду перезагрузки.

Теперь подробно, по шагам.


Создаем в текстовом редакторе файл router.vbs (например)

Копируем туда следующий код:
>>>Начало кода со следующей строки<<<
Function PcOnline (strComputer)
'Check if the remote machine is online.
Dim objPing,objStatus
Dim TextStream, TimeVar
Dim fso, tf
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set objPing = GetObject(«winmgmts:{impersonationLevel=impersonate}»)._
ExecQuery(«select Replysize from Win32_PingStatus where address = '» & strComputer & "'")
For Each objStatus in objPing
If IsNull(objStatus.ReplySize) Then
PcOnline=False
'Пишем Лог файл
Set fso = CreateObject(«Scripting.FileSystemObject»)
If (fso.FileExists(«c:\routerlog.txt»)) Then
Set tf = fso.OpenTextFile(«c:\routerlog.txt»,ForAppending, True)
tf.WriteLine(Now() & " " & strComputer & " is down ")
tf.Close()
Set fso = Nothing
Set tf = Nothing
Else
Set tf = fso.CreateTextFile(«c:\routerlog.txt»,ForAppending, True)
tf.WriteLine(Now() & " " & strComputer & " is down ")
tf.Close()
Set fso = Nothing
Set tf = Nothing
End If
' Конец Лог файла
Else
PcOnline = True
'Wscript.Echo strComputer & " is responding to a ping "
End If
Next
Set objPing=Nothing
Set objStatus=Nothing
End Function
Dim fsot, tft
Const ForReading = 1, ForWriting = 2, ForAppending = 8
If PcOnline(«www.ya.ru»)_
OR PcOnline(«www.google.com»)_
Then
' если статус = 0, пустая строка — другое
Wscript.Echo «all ok»
Set fsot = CreateObject(«Scripting.FileSystemObject»)
Set tft = fsot.OpenTextFile(«c:\routerlog.txt»,ForAppending, True)
tft.WriteLine("-----------------")
tft.Close()
Set fsot = Nothing
Set tft= Nothing
WScript.Quit 0
Else
'WScript.Echo «Reboot»
'Set oShell = WScript.CreateObject(«WScript.Shell»)
'oShell.Run «telnet.exe 1.1.0.1»
'WScript.Sleep 2000
'oShell.SendKeys «user» & chr(13)
'WScript.Sleep 2000
'oShell.SendKeys «password» & chr(13)
'WScript.Sleep 2000
'oShell.SendKeys «reload» & chr(13)
'WScript.Sleep 2000
'oShell.SendKeys "^({]})q" & chr(13)
'WScript.Quit 255
End If
Set fsot = CreateObject(«Scripting.FileSystemObject»)
Set tft = fsot.OpenTextFile(«c:\routerlog.txt»,ForAppending, True)
tft.WriteLine("-----------------")
tft.Close()
Set fsot = Nothing
Set tft= Nothing
>>>Конец кода на предыдущей строке<<<

Что к чему:
ya.ru и google.com сервера, которые пингует скрипт для проверки ест ли интернет или нет
user — логин админа роутера или модема – обычно admin
password – пароль админа.
В строчке 'oShell.Run «telnet.exe 1.1.0.1» вместо 1.1.0.1 прописываем адрес своего роутера (192.168.1.1 например)
В строчке 'oShell.SendKeys «reload» & chr(13) – reload, это команда, которая перегружает роутер или модем, может отличаться от модели к модели. Посмотрите в документации или методом научного тыка и вставьте ту команду, которая подходит вам – я встречал reload и reboot.
Также скрипт пишет лог файл c:\routerlog.txt

ИСПОЛЬЗОВАНИЕ:
Сохраняем файл router.vbs с кодом внутри.
Добавляем в качестве задания запускать этот файл каждые 30 минут (по желанию)
Для XP — Панель управления -> Назначенные задания -> Добавить задание

Теперь скрипт будет каждые 30 минут проверять соединение с интернет и в случае срыва коннекта перегружать роутер/модем.
Tags:
инструкция, роутер, модем, adsl

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.