Скрипт перезагрузки роутера при разрыве коннекта
Дома, как, как и у многих, интернет раздает роутер.
Купленный в свое время ZyXEL P-330W вполне справлялся со своей задачей, пока однажды не начались проблемы. Видимо провайдер что-то там у себя делал, сетка падала, а роутер оставался в полной уверенности, что все в порядке и не переподключал соединение.
Единственное, что оставалось — перегружать сам роутер путем отключения питания.
Т.к. домашний сервак работает 24/7 и интернет ему нужен постоянно, озадачился проблемой автоматической перезагрузки роутера в случае, если отрубается интернет.
ПРОБЛЕМА:
Роутер или ADSL модем теряет связь и не восстанавливает соединение.
РЕШЕНИЕ:
Использование скрипта для проверки подключения к интернет и перезагрузки роутера в случае необходимости.
Как это все будет работать – Раз в полчаса планировщик запускает скрипт, который пингует определенные адреса и если ответа нет, заходит на роутер через телнет и отправляет команду перезагрузки.
Теперь подробно, по шагам.
Создаем в текстовом редакторе файл router.vbs (например)
Копируем туда следующий код:
>>>Начало кода со следующей строки >>Конец кода на предыдущей строке Назначенные задания -> Добавить задание
Теперь скрипт будет каждые 30 минут проверять соединение с интернет и в случае срыва коннекта перегружать роутер/модем.
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
VBScript: В случае успешного пинга выполнить действие
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщения 46
1 Тема от cbh 2010-01-13 23:10:51
Тема: VBScript: В случае успешного пинга выполнить действие
Добрый день, вот научил скрипт выполнять действие в случае пинга.
Но проблема в том, что действие выполняется только после того, как пройдет весь пинг, а как сделать скажем так, постояно пингуется машина которая офф в сети. как только машина стартует и пинг до нее доходит, то выполняется некое действие.
2 Ответ от VSVLAD 2010-01-13 23:21:43
Re: VBScript: В случае успешного пинга выполнить действие
А не проще было бы. Запустить пинг c «-n 1000» а потом используя стандартные потоки вывода смотреть результат. Или через WMI в бесконечном цикле, и делать Sleep между запросами.
3 Ответ от cbh 2010-01-13 23:44:08
Re: VBScript: В случае успешного пинга выполнить действие
Кому проще? мне, нет))
А если серьезно, то Sleep между запросами не подходит, фишка задачи, как раз таки в том, чтобы выполнить действие, как только сетевая карта+сетевые службы машины стартует. Иначе я просто через WScript.Sleep задал бы некое время.
Нужна мгновенная реакция на появление пинга.
Сейчас объясню причину, а то понабегут и начнут предъявы писать, мол вирус пишу.
Действие должно рестартовать машину, которая по DHCP через Wi-Fi получает IP, зачем мне это нужно не важно.
Я естественно пинговать буду через LAN, который вообще по определению в статус готов входит раньше, чем Wi-Fi.
4 Ответ от alexii 2010-01-14 08:54:24
Re: VBScript: В случае успешного пинга выполнить действие
cbh, лучше попробуйте использовать WMI — «Win32_PingStatus».
5 Ответ от cbh 2010-01-14 09:30:41 (изменено: cbh, 2010-01-14 09:31:31)
Re: VBScript: В случае успешного пинга выполнить действие
Написал,что я делаю не так? Дает ошибку line 1 / 15 что то с именем хоста, не знаю.
Вот нашел другой вариант, вот здесь http://www.visualbasicscript.com/m42535.aspx
Проверить также не смог.
Напоминаю мою задачу, постоянно следить за компом через пинг, как только пинг появляется рестартовать его.
6 Ответ от alexii 2010-01-14 10:29:59
Re: VBScript: В случае успешного пинга выполнить действие
cbh, Вы делаете неправильно:
* приводить нужно весь скрипт, а не одну функцию, что написано в Правилах.
* как приводить сообщение об ошибке, тоже написано в Правилах форума.
Вот Вам, по изложенному коллегой VSVLAD в посте #2, примерный код (не проверялось):
«WScript.Sleep 1000», если не устраивает, можете либо закомментировать, либо поменять на «WScript.Sleep 100». Отправить удалённую машину на перезагрузку можно так же посредством WMI.
7 Ответ от cbh 2010-01-14 11:38:59
Re: VBScript: В случае успешного пинга выполнить действие
Спасибо, обязательно попробую и отпишусь.
Касательно, правил,я тут новенький, прошу прощения. Обязательно ознакомлюсь с правилами. Я здесь судя по всему надолго))
8 Ответ от cbh 2010-01-14 11:51:17
Re: VBScript: В случае успешного пинга выполнить действие
alexii, проверить скрипт до вечера не смогу, поэтому чтобы не терять время спрошу сразу.
1.При закомментированном «WScript.Sleep 1000» скрипт будет автоматически постоянно повторяться n-раз, пока не выполнит перезагрузку устройства?
2.При незакомментированном «WScript.Sleep 1000» скрипт будет автоматически повторяться каждую секунду n-раз, пока не выполнит перезагрузку устройства?
9 Ответ от alexii 2010-01-14 12:01:09
Re: VBScript: В случае успешного пинга выполнить действие
1.При закомментированном «WScript.Sleep 1000» скрипт будет автоматически постоянно повторяться n-раз, пока не выполнит перезагрузку устройства?
2.При незакомментированном «WScript.Sleep 1000» скрипт будет автоматически повторяться каждую секунду n-раз,…
Безотносительно комментирования «WScript.Sleep 1000»: скрипт будет повторяться до тех пор, пока не «допингуется» до указанного адреса с тайм-аутом 1000 мс (значение по умолчанию; при желании можно и поменять, но обычно достаточно и умолчального значения). После этого произойдёт выход из цикла опроса (см. также ниже).
«WScript.Sleep 1000» просто добавляет внутрь этого цикла паузу в одну секунду (прежде всего, чтобы дать время остальным выполняемым задачам).
…пока не выполнит перезагрузку устройства?
В скрипте нет команд, организующих перезагрузку. Вы должны добавить их сами вместо комментария «’ Reboot commands here». Поскольку в примере их нет — по следующей команде «Exit Do» произойдёт просто выход из цикла опроса.
10 Ответ от cbh 2010-01-14 12:06:57
Re: VBScript: В случае успешного пинга выполнить действие
Спасибо,насчет перезагрузки ясно конечно же, команду для перезагрузки я почти написал, через телнет кстати, машина на Юниксе.
В любом случае спасибо, вечером протестирую.
11 Ответ от cbh 2010-01-14 21:53:13
Re: VBScript: В случае успешного пинга выполнить действие
Line: 15
Char:9
Error:Object required: »
Code:800A01A8
Немного сам поэкспериментировал, не получилось.
12 Ответ от alexii 2010-01-14 22:40:37
Re: VBScript: В случае успешного пинга выполнить действие
13 Ответ от cbh 2010-01-16 14:51:20
Re: VBScript: В случае успешного пинга выполнить действие
Наконец-то проверил. Все работает супер, спасибо большое. Вас интересует, как я телнетился на машину, используя только VBS?
Я просто, поискал по форуму, вроде никто не делал этого через чистый VBS, без WinSock и сторонних программ.
Я могу выложить его сюда, если понадобится.
Отличный форум, так держать.
Перезагрузка Wi-Fi-роутеров
Вопрос в чем, у меня есть 15 роутеров wi fi как написать скрипт для параллельной перезагрузки всех роутеров
Маршрутизация роутеров
Всем здравствуйте. У меня назрел такой вопрос к тем кто разбирается, в организации есть сеть wi-fi.
ПК не пингуют из-за роутеров
Не могу решить ету проблему. Помогите, пожалуйста Задание звучит так: дана сеть 192.168.5.0/24.
Цепочка из Wi-Fi роутеров
Добрый день. Собственно вопрос. Стоит модем D-Link DSL 2750U Он раздает инет как по проводкам.
Объединение роутеров
Помогите объединить роутеры, чтобы можно было обменивать информацией между всеми компьютерами
Не работал с putty, может как то возможно перенаправить ввод на нее сразу при создании процесса.
Надо потестировать на живом.
И, последний вариант, отправка сочетаний в неактивное окно с помощью сторонних средств.
Как будет время, посмотрю.
Решение
Чтобы не заморачиваться с консольными утилитами, или, что хуже, с .SendKeys, это можно сделать с помощью VBS, используя XHR запросы. Но сначала придется исследовать API web-интерфейсы роутеров — выяснить какие заголовки и данные нужно отправлять с запросом, чтобы добраться до команды перезагрузки. Например, для моего роутера DIR-620 оказалось достаточно 2 запросов: авторизация и, собственно, сама команда перезагрузки:
Все данные я нашел с помощью браузера (Chrome — F12 — вкладка Network), проделав вышеописанные действия в нем вручную. Прикрепил пару скриншотов, на первом показан POST-запрос для авторизации, на втором — GET-запрос на перезагрузку.
Далее останется лишь организовать запуск нескольких скриптов (для каждого роутера — свой), либо асинхронные запросы внутри одного скрипта.