VBS Скрипт перезагрузки роутера QTECH-1040WU при разрыве коннекта

Тема в разделе "Visual Basic 6 / Сценарии VBScript, JScript", создана пользователем machito, 25 ноя 2015.

  1. machito
    Оффлайн

    machito Команда форума Супер-Модератор

    Сообщения:
    1.906
    Симпатии:
    1.940
    Доброго времени, уважаемые скрипТачи.
    Хочу отредактировать скрипт для своего роутера ADSL QDSL-1040WU-FON.
    Но поскольку с этим мало знаком, то прошу помощи.
    Спасибо!

    Код (vb.net):
    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 192.168.1.1"
        'WScript.Sleep 2000
        'oShell.SendKeys "admin" & chr(13)
        'WScript.Sleep 2000
        'oShell.SendKeys "*******" & chr(13)
        'WScript.Sleep 2000
        'oShell.SendKeys "reboot" & 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
     

    Вложения:

    • router.txt
      Размер файла:
      2 КБ
      Просмотров:
      3
    SNS-amigo нравится это.
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.307
    Привет!

    Во-первых, зайди на роутер и поставь сложный пароль.
    Второе. У роутера должен быть включен сервис telnet.
    По-умолчанию, бывает по-разному. Чаще его можно найти где-то в разделе "Remote Management".
    Бывает и так, что в веб-шкурке такой опции нет и активировать данный сервис можно только через какой-нибудь сторонний пэйлоадер или перепрошивкой, например, к OpenWRT, бывает и скрытая заводская консоль.

    На счет скрипта, он в целом неплох, за исключением двух но.
    1) в новых системах (Vista и выше) по-умолчанию этот системный компонент (telnet.exe) отключен.
    2) я бы добавил еще код активации фокуса окна telnet:
    Код (vb.net):

            Set ColProcesses = objWMIService.ExecQuery("Select * from Win32_Process",,48)
                For Each Process in ColProcesses
                    If Process.Name = "Telnet.exe" Then
                        WshShell.AppActivate Process.Identifier
                    End If
                Next

     

    Итого, третье: я бы посоветовал воспользоваться вместо скрипта консольной утилитой plink (от разработчика putty).
    Скачать можно здесь: PuTTY Download Page

    Копируешь ее куда-нибудь, например в папку c:\router
    Затем в консоли набираешь:
    Код (Text):

    cd /d c:\router
     
    и пытаешься вызвать перезагрузку:
    Код (Text):

    plink -noagent -l admin -pw password 192.168.1.1 reboot
     
    или так попробуй:
    Код (Text):

    plink -v -ssh admin@192.168.1.1 -pw "password" exec "reboot"
     
    логин/пароль/ip естественно подставишь свои.
    Если будут ошибки, скидывай сюда, что пишет консоль. Посмотрим. У меня в этом плане опыта немного. Но постараемся помочь.
     
    Последнее редактирование: 25 ноя 2015
    SNS-amigo, orderman и machito нравится это.
  3. machito
    Оффлайн

    machito Команда форума Супер-Модератор

    Сообщения:
    1.906
    Симпатии:
    1.940
    OpenWrt Wiki [OpenWrt Wiki]
    Нет моей модели, одни тплинки и длинки))
     
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.307
    machito, нужно указывать не внешний IP, а локальный.
    И попробуй консольной версией.

    А что за роутер у тебя?
     
  5. machito
    Оффлайн

    machito Команда форума Супер-Модератор

    Сообщения:
    1.906
    Симпатии:
    1.940
    Сразу вылетает ошибка.

    [​IMG]

    Алекс, наверное нужно убедиться в начале, активен telnet,
    или будем пробовать на авось.
     
    Последнее редактирование: 27 ноя 2015
  6. machito
    Оффлайн

    machito Команда форума Супер-Модератор

    Сообщения:
    1.906
    Симпатии:
    1.940
    Пробовал, команды не воспринимаются консолью. дописал твой скрипт.

    Код (vb.net):
    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 &"'")

       ForEach objStatus in objPing
           IfIsNull(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
               EndIf

               ' Конец Лог файла
           Else
                PcOnline =True
               'Wscript.Echo strComputer & " is responding to a ping "
           EndIf
       Next

       Set objPing=Nothing
       Set objStatus=Nothing
    EndFunction

    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.Quit0
    Else
       'WScript.Echo "Reboot"
       'Set oShell = WScript.CreateObject("WScript.Shell")
       'oShell.Run "telnet.exe 192.168.1.1"
       'WScript.Sleep 2000
       'oShell.SendKeys "admin" & chr(13)
       'WScript.Sleep 2000
       'oShell.SendKeys "*******" & chr(13)
       'WScript.Sleep 2000
       'oShell.SendKeys "reboot" & chr(13)
       'WScript.Sleep 2000
       'oShell.SendKeys "^({]})q" & chr(13)
       'WScript.Quit 255
    EndIf

    Set fsot =CreateObject("Scripting.FileSystemObject")
    Set tft = fsot.OpenTextFile("c:\routerlog.txt",ForAppending, True)
    tft.WriteLine("-----------------")
    tft.Close()
    Set fsot =Nothing
    Set tft=Nothing
    Set ColProcesses = objWMIService.ExecQuery("Select * from Win32_Process",,48)
               ForEach Process in ColProcesses
                   If Process.Name="Telnet.exe"Then
                        WshShell.AppActivate Process.Identifier
                   EndIf
               Next
     
    Последнее редактирование: 25 ноя 2015
  7. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.307
    А смысл? Тем более первая часть неправильная. Не в таком виде. Добьешься работы простой команды, потом будем сочинять скрипт.
    Проще через консоль:
    Код (Text):
    telnet 192.168.1.1
    Только сперва в оснастке "Программы и компоненты" -> Удаление программ -> Включение и отключение компонентов Windows - нужно включить "Клиент telnet".
    Connection refused означает, что роутер отверг данный способ подключения. Служба неактивна. Ищи в настройках модема через веб-морду.
    Qtech? Первый раз о таком слышу. Придется все на ощупь.

    Еще есть такой вариант симмитировать запрос веб-страницы. Можем попробовать.
     
    Последнее редактирование: 26 ноя 2015
    machito нравится это.
  8. machito
    Оффлайн

    machito Команда форума Супер-Модератор

    Сообщения:
    1.906
    Симпатии:
    1.940
    значит и "сервер telnet" тоже ставлю галочку.
    ростелекомовские QTECH QDSL-1040WU-FON - ADSL-маршрутизаторы
    в настройках нет ничего похожего с telnet, скрины могу показать если что.
    Да, а что в протоколе, тоже прописывать ip ? А то у меня на автомате.
     
    Последнее редактирование: 27 ноя 2015
  9. machito
    Оффлайн

    machito Команда форума Супер-Модератор

    Сообщения:
    1.906
    Симпатии:
    1.940
    Лёд тронулся господа, но теперь не хочет принимать логин "incorrect" по умолчанию, admin, пароль сменил.

    [​IMG]

    Менять логин ?
     
    Последнее редактирование: 27 ноя 2015
  10. fseto
    Оффлайн

    fseto Студент 2 курс

    Сообщения:
    1.325
    Симпатии:
    278
    для твоей задачи не обязательно.
    Тоже не обязательно, но можешь попробовать.
     
  11. machito
    Оффлайн

    machito Команда форума Супер-Модератор

    Сообщения:
    1.906
    Симпатии:
    1.940
    Намудрил, теперь в морду зайти не могу, хотя ввожу правильно всё, модем перезагружал но толку нет.
    Видимо ресет придётся делать.
     
    Последнее редактирование: 26 ноя 2015
  12. fseto
    Оффлайн

    fseto Студент 2 курс

    Сообщения:
    1.325
    Симпатии:
    278
    копипастом пробовал, мало ли?))
    вероятно пароль у тебя прежний, ты же логин собирался поменять, пробовал оба варианта?
    Настройки патч-кордом меняешь?
     
    Последнее редактирование: 26 ноя 2015
  13. machito
    Оффлайн

    machito Команда форума Супер-Модератор

    Сообщения:
    1.906
    Симпатии:
    1.940
    Я всё сменил))
    Доступ к вашему DSL маршрутизатору управляется через три учетных записи:
    Admin, поддержки, и пользователя.
    Имя пользователя "администратор" имеет неограниченный доступ к изменению конфигурации вашего DSL Routerа.
    Имя пользователя "поддержка" используется, чтобы позволить провайдеру технику, получить доступ к вашему DSL Routerу для запуска диагностики.
    Имя пользователя "пользователь" получает доступ к DSL Routerу, параметры конфигурации вида и статистики, а также, обновить программное обеспечение маршрутизатора.
    Используйте поля ниже, ввести до 15 символов и нажать кнопку "Применить/Сохранить"
     
    Последнее редактирование: 26 ноя 2015
  14. fseto
    Оффлайн

    fseto Студент 2 курс

    Сообщения:
    1.325
    Симпатии:
    278
    Я всегда оставлял только
    т.к. никому не собирался давать доступ к роутеру.

    Ну как там доступ по телнету получился?)
     
  15. machito
    Оффлайн

    machito Команда форума Супер-Модератор

    Сообщения:
    1.906
    Симпатии:
    1.940
    Логин с паролем сменил успешно, наконец то таки
    (4-ре раза ресетил :Biggrin: не получалось из-за длинны пароля, как оказалось, хотя длинной это не назвать было)
    telnet 192.168.1.1 распознаётся, теперь консоль просит ввести команду.

    [​IMG]
    к стати, логин admin не принимался.
     
    Последнее редактирование: 26 ноя 2015
  16. Phoenix
    Онлайн

    Phoenix Активный пользователь

    Сообщения:
    1.847
    Симпатии:
    1.833
    Telnet (PuTTYtel) - в этой всё принимается. Можно указать либо адрес хоста (192.168.1.1 например), либо имя хоста (MyRouter.Home например).
     
    machito нравится это.
  17. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.307
    machito, ну так что, telnet-ом залогиниться получилось в итоге?
    Команду reboot в консоль telnet вводить пробовал? Роутер перезагружается?

    И что ты сделал, что telnet перестал выдавать ошибку при подключении к роутеру, нашел опцию?
     
    Последнее редактирование: 26 ноя 2015
  18. machito
    Оффлайн

    machito Команда форума Супер-Модератор

    Сообщения:
    1.906
    Симпатии:
    1.940
    да, всё отлично, ребутится.

    [​IMG]

    Сменил логин, admin не принима и как ясно стало telnet активен по умолчанию, потому что ничего не включал кроме "Клиент telnet",
    ставил галочку "Telnet-сервер" но работает и без неё, по этому снял.
    Принимает логин, после тупо не даёт ничего вводить. на остальные команды так же не реагирует.
     
    Последнее редактирование: 27 ноя 2015
  19. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.307
    machito, а что с утилитой plink, тоже заработала? Можешь, пожалуйста, проверить? Интересно.
    Вечером накидаю итоговый скрипт. Знать только какую утиль использовать. С plink будет быстрее работать.
     
    machito нравится это.
  20. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.307
    Читай буквально. Я прошу проверить именно plink, никакую не putty / puttytel. То, что с ними ошибка не означает, что тоже самое произойдет и с консольной.
    Строки запуска указаны в посту № 2 этой темы.
     
    machito нравится это.

Поделиться этой страницей