Share...
19 Feb 2011 12:06
войти зарегистрироваться

ПесочницаСкрипт перезагрузки роутера при разрыве коннекта

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 минут проверять соединение с интернет и в случае срыва коннекта перегружать роутер/модем.
  • инструкция, роутер, модем, adsl