Главная

Friday, 26 July 2013

Удаленная перезагрузка маршрутизатора D-link 2500U


        Помню был у соседа маршрутизатор D-link 2500U/BRU/D. Маршрутизатор ADSL DSL-2500U/BRU/D позволяет быстро и просто получить широкополосный доступ в Интернет и совместно использовать канал связи ADSL несколькими пользователями. Благодаря встроенному интерфейсу ADSL2/ADSL2+, поддерживающему скорость нисходящего потока до 24 Мбит/с, межсетевому экрану и QoS, это устройство предоставляет пользователям удобный и экономичный способ создания безопасной, высокоскоростной сети.


Неплохой маршрутизатор. Но я про задачу его удаленой перезагрузки. По всей видимости сосед особо его конфигурированием не занимася и раздавал интернет еше кому то, поэтому маршрутизатор зависал частенько. Ну не ждать же его ручной перезагрузки…

Это можно сделать удаленно через telnet. Но набирать каждый раз пяток другой команд, да и ребенку это не расскажешь.  Поэтому я написал VB-скрипт который в некоторой степени этот процесс перезагрузки автоматизировал.  Находил я как-то автоматизацию такой же перезагрузки в интернете через TSE (Telnet Script Executor), но я не хочу доверять пароли к маршрутизатору незнакомому софту !

Ниже привожу текст своего скрипта (tel2500u.vbs):
Option Explicit
On Error Resume Next
Dim WshShell, theCalculator
Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo("Reboot D-Link 2500u by Telnet")


Запуск сессии telnet
theCalculator = WshShell.Run("смd /c telnet.exe", 1, False)
WScript.Sleep 500
WshShell.AppActivate "%comspec%"
WScript.Sleep 500

Назначаем журнал сессии

WshShell.SendKeys "set logfile tel2500.log~"
WScript.Sleep 100
WshShell.SendKeys "open 192.168.1.1~"
WScript.Sleep 5500

Имя администратора - вам нужно ваше
WshShell.SendKeys "admin~"
WScript.Sleep 1500

Пароль администратора - вам нужен ваш
WshShell.SendKeys "admin~"
WScript.Sleep 1500
WshShell.SendKeys "sysinfo~"
WScript.Sleep 1500


В документации иногда предлагают ребут делать с помощью команды kill
'WshShell.SendKeys "kill 1~"
WshShell.SendKeys "reboot~"

Самая большая задержка. Возможно ее придется увеличить если ваш маршрутизатор не будет успевать восстановится.
WScript.Sleep 37000

Следующий блок делает проверку состояния маршрутизатора
WshShell.AppActivate "%comspec%"
WshShell.SendKeys "xx"   
WScript.Sleep 500
WshShell.SendKeys "open 192.168.1.1~"
WScript.Sleep 1500
WshShell.SendKeys "admin~"
WScript.Sleep 500
WshShell.SendKeys "admin~"
WScript.Sleep 500
WshShell.SendKeys "sysinfo~"
WScript.Sleep 1500
WshShell.SendKeys "logout~"
WScript.Sleep 500
WshShell.SendKeys "xx"
WshShell.SendKeys "quit~"

Оригинал скрипта можете взять здесь.

9 comments:

  1. Option Explicit
    On Error Resume Next

    Dim WshShell, theCalculator
    Set WshShell = WScript.CreateObject("WScript.Shell")

    WScript.Echo("Reboot D-Link 2500u by Telnet (~45 sec)")
    theCalculator = WshShell.Run("cmd /c telnet 192.168.1.2")
    WScript.Sleep 500
    WshShell.SendKeys "admin"
    WScript.Sleep 500
    WshShell.SendKeys "admin"
    WScript.Sleep 1500
    WshShell.SendKeys "reboot"


    ответ
    BCM96332 ADSL Router
    Login: 5~14-9,14-9,52//

    ReplyDelete
  2. А в чем проблема то? В телнет ручками все ок?

    ReplyDelete
  3. в телнет я спокойно захожу ввожу логин и пароль и перезапускаю.а скрипт не хочет .

    поле заполняется вот так Login: 5~14-9,14-9,52//

    ReplyDelete
  4. а паузу и повторный опен после ребута тоже выполняете?

    ReplyDelete
  5. И почему у вас все без тильды "~". У меня по другому не работало.

    ReplyDelete
  6. и с тильдами и без всё равно он поля логина и пароля заполняет цыфрами.а должен указанными

    ReplyDelete
  7. - до ребута логин нормально отдает ?
    - пауза после ребута сколько мсек ?
    - логин после ребута каждый раз заполняет разным мусором?

    ReplyDelete
  8. Cегодня столкнулся с подобным: поле заполняется вот так Login: 5~14-9,14-9,52//
    Решается просто - чтобы вывело "admin" а не "14-9", нужно писать большими буквами "ADMIN". Т.е. WshShell.SendKeys "admin~" выдаст в поле Login:"14-9",
    а WshShell.SendKeys "ADMIN~" выдаст "admin" ;)

    ReplyDelete
  9. это происходит только если язык по умолчанию русский. С английским нет проблем. а для русского нужно назначить сочетание для включения английской раскладки и добавить SendKeys c ним перед SendKeys "ADMIN~"

    ReplyDelete

А что вы думаете по этому поводу?