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

machito

Команда форума
Супер-Модератор
Сообщения
2,466
Реакции
2,265
Баллы
593
Доброго времени, уважаемые скрипТачи.
Хочу отредактировать скрипт для своего роутера 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 KB · Просмотры: 3

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,612
Реакции
6,051
Баллы
808
Привет!

Во-первых, зайди на роутер и поставь сложный пароль.
Второе. У роутера должен быть включен сервис 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
Затем в консоли набираешь:
Код:
cd /d c:\router
и пытаешься вызвать перезагрузку:
Код:
plink -noagent -l admin -pw password 192.168.1.1 reboot
или так попробуй:
Код:
plink -v -ssh admin@192.168.1.1 -pw "password" exec "reboot"
логин/пароль/ip естественно подставишь свои.
Если будут ошибки, скидывай сюда, что пишет консоль. Посмотрим. У меня в этом плане опыта немного. Но постараемся помочь.
 
Последнее редактирование:

machito

Команда форума
Супер-Модератор
Сообщения
2,466
Реакции
2,265
Баллы
593

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,612
Реакции
6,051
Баллы
808
machito, нужно указывать не внешний IP, а локальный.
И попробуй консольной версией.

А что за роутер у тебя?
 

machito

Команда форума
Супер-Модератор
Сообщения
2,466
Реакции
2,265
Баллы
593
machito, нужно указывать не внешний IP, а локальный.
Сразу вылетает ошибка.

81042eb1d967b76ef23005caea65d7ee.png


Алекс, наверное нужно убедиться в начале, активен telnet,
или будем пробовать на авось.
 
Последнее редактирование:

machito

Команда форума
Супер-Модератор
Сообщения
2,466
Реакции
2,265
Баллы
593
И попробуй консольной версией.
Пробовал, команды не воспринимаются консолью. дописал твой скрипт.

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
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,612
Реакции
6,051
Баллы
808
Пробовал, команды не воспринимаются консолью. дописал твой скрипт.
А смысл? Тем более первая часть неправильная. Не в таком виде. Добьешься работы простой команды, потом будем сочинять скрипт.
Проще через консоль:
Код:
telnet 192.168.1.1
Только сперва в оснастке "Программы и компоненты" -> Удаление программ -> Включение и отключение компонентов Windows - нужно включить "Клиент telnet".
Сразу вылетает ошибка.
Connection refused означает, что роутер отверг данный способ подключения. Служба неактивна. Ищи в настройках модема через веб-морду.
А что за роутер у тебя?
Qtech? Первый раз о таком слышу. Придется все на ощупь.

Еще есть такой вариант симмитировать запрос веб-страницы. Можем попробовать.
 
Последнее редактирование:

machito

Команда форума
Супер-Модератор
Сообщения
2,466
Реакции
2,265
Баллы
593
Только сперва в оснастке "Программы и компоненты" -> Удаление программ -> Включение и отключение компонентов Windows - нужно включить "Клиент telnet".
значит и "сервер telnet" тоже ставлю галочку.
Qtech? Первый раз о таком слышу. Придется все на ощупь.
ростелекомовские QTECH QDSL-1040WU-FON - ADSL-маршрутизаторы
в настройках нет ничего похожего с telnet, скрины могу показать если что.
Да, а что в протоколе, тоже прописывать ip ? А то у меня на автомате.
 
Последнее редактирование:

machito

Команда форума
Супер-Модератор
Сообщения
2,466
Реакции
2,265
Баллы
593
Лёд тронулся господа, но теперь не хочет принимать логин "incorrect" по умолчанию, admin, пароль сменил.

0fa03b6ea9ce87cee149db44a2e0d862.png


Менять логин ?
 
Последнее редактирование:

machito

Команда форума
Супер-Модератор
Сообщения
2,466
Реакции
2,265
Баллы
593
Намудрил, теперь в морду зайти не могу, хотя ввожу правильно всё, модем перезагружал но толку нет.
Видимо ресет придётся делать.
 
Последнее редактирование:

fseto

Ветеран
Сообщения
1,438
Реакции
320
Баллы
563
Намудрил, теперь в морду зайти не могу, хотя ввожу правильно всё,
копипастом пробовал, мало ли?))
вероятно пароль у тебя прежний, ты же логин собирался поменять, пробовал оба варианта?
Настройки патч-кордом меняешь?
 
Последнее редактирование:

machito

Команда форума
Супер-Модератор
Сообщения
2,466
Реакции
2,265
Баллы
593
Я всё сменил))
Доступ к вашему DSL маршрутизатору управляется через три учетных записи:
Admin, поддержки, и пользователя.
Имя пользователя "администратор" имеет неограниченный доступ к изменению конфигурации вашего DSL Routerа.
Имя пользователя "поддержка" используется, чтобы позволить провайдеру технику, получить доступ к вашему DSL Routerу для запуска диагностики.
Имя пользователя "пользователь" получает доступ к DSL Routerу, параметры конфигурации вида и статистики, а также, обновить программное обеспечение маршрутизатора.
Используйте поля ниже, ввести до 15 символов и нажать кнопку "Применить/Сохранить"
 
Последнее редактирование:

machito

Команда форума
Супер-Модератор
Сообщения
2,466
Реакции
2,265
Баллы
593
Логин с паролем сменил успешно, наконец то таки
(4-ре раза ресетил :Biggrin: не получалось из-за длинны пароля, как оказалось, хотя длинной это не назвать было)
telnet 192.168.1.1 распознаётся, теперь консоль просит ввести команду.

ca52e8fa55041653937c1777fe08b4d4.png

Тоже не обязательно, но можешь попробовать.
к стати, логин admin не принимался.
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,612
Реакции
6,051
Баллы
808
machito, ну так что, telnet-ом залогиниться получилось в итоге?
Команду reboot в консоль telnet вводить пробовал? Роутер перезагружается?

И что ты сделал, что telnet перестал выдавать ошибку при подключении к роутеру, нашел опцию?
 
Последнее редактирование:

machito

Команда форума
Супер-Модератор
Сообщения
2,466
Реакции
2,265
Баллы
593
Команду reboot в консоль telnet вводить пробовал? Роутер перезагружается?
да, всё отлично, ребутится.

e117a185a0f71a2e539f1ed1b90f0d23.png


И что ты сделал, что telnet перестал выдавать ошибку при подключении к роутеру, нашел опцию?
Сменил логин, admin не принима и как ясно стало telnet активен по умолчанию, потому что ничего не включал кроме "Клиент telnet",
ставил галочку "Telnet-сервер" но работает и без неё, по этому снял.
PuTTYtel в этой всё принимается. Можно указать либо адрес хоста (192.168.1.1 например), либо имя хоста (MyRouter.Home например).
Принимает логин, после тупо не даёт ничего вводить. на остальные команды так же не реагирует.
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,612
Реакции
6,051
Баллы
808
machito, а что с утилитой plink, тоже заработала? Можешь, пожалуйста, проверить? Интересно.
Вечером накидаю итоговый скрипт. Знать только какую утиль использовать. С plink будет быстрее работать.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,612
Реакции
6,051
Баллы
808
Dragokas, писал ведь выше)
Читай буквально. Я прошу проверить именно plink, никакую не putty / puttytel. То, что с ними ошибка не означает, что тоже самое произойдет и с консольной.
Строки запуска указаны в посту № 2 этой темы.
 
Сверху Снизу