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

machito

Команда форума
Супер-Модератор
Сообщения
2,358
Реакции
2,174
Баллы
503
Заработала, поставил галочку Telnet-сервер.
Я прошу проверить именно plink, никакую не putty / puttytel.
Те что по ссылке давали, а именно сейчас puttytel, (но отвечает только на 192.168.1.1)
п.с. а что за plink понять не могу.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,387
Реакции
5,877
Баллы
718

machito

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

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,387
Реакции
5,877
Баллы
718
после ввода просит ещё рас ребут.
В смысле?
То что подчеркнуто красным - это и есть выполняемая команда.
В результате роутер перезагрузился?
(судя по сообщению консоли о том, что роутер внезапно разорвал подключение, то так и есть)
 
Последнее редактирование:

machito

Команда форума
Супер-Модератор
Сообщения
2,358
Реакции
2,174
Баллы
503
То что подчеркнуто красным - это и есть выполняемая команда.
Нет, это введённая мной, после основного ввода консоль была в ожидании >
и после ввода "reboot" пошла перезагрузка.
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,387
Реакции
5,877
Баллы
718
Хм.
Давай так попробуем:
Код:
plink -batch -noagent -l admin -pw password 192.168.1.1 reboot
Еще так:
Код:
echo reboot> R
<R plink -noagent -l admin -pw password 192.168.1.1
и вот так:
Код:
echo reboot| plink -noagent -l admin -pw password 192.168.1.1
 

machito

Команда форума
Супер-Модератор
Сообщения
2,358
Реакции
2,174
Баллы
503
не одна команда не проходит, вернее 1-я и 3-я в ожидании >
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,387
Реакции
5,877
Баллы
718
machito, повтори пожалуйста, второй код. Он был введен не в ту консоль.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,387
Реакции
5,877
Баллы
718
Понятно спасибо. Значит батник сделать не получится.

Тогда выходит вот такой скрипт .VBS

VB.NET:
Option Explicit

Dim CheckPeriodSuccess, CheckPeriodFailure, CheckTimes, CheckTimesPeriod, oShell, LocalIP, UserName, Password, Client, Times

' =====================================================================

' Данные аутентификации
LocalIP = "192.168.1.1"
UserName = "admin"
Password = "pass"

' Периодичность проверки пинга в мсек. (если подключение есть)
CheckPeriodSuccess = 10000

' Задержка перед повторной проверкой, если роутер был перезагружен
CheckPeriodFailure = 120000

' Кол-во контрольных проверок пинга (пакетов подряд)
CheckTimes = 3
' с интервалом (мсек.)
CheckTimesPeriod = 1000

' Путь к программе-клиенту (например plink.exe)
Client = "telnet.exe"

' =====================================================================

Set oShell = WScript.CreateObject("WScript.Shell")

Do
    if CheckRouter() then
        ' если все ОК
        WScript.Sleep CheckPeriodSuccess
    else
        ' если произведена перезагрузка
        WScript.Sleep CheckPeriodFailure       
    end if
Loop


Function CheckRouter()
  Dim Connected, ProcessID

  Connected = false

  Times = CheckTimes
  Do
    If IsOnline("www.ya.ru") then
        Connected = true
    elseif IsOnline("8.8.8.8") Then
        Connected = true
    end if
    if not Connected then
        if Times > 0 then
            Times = Times - 1
            WScript.Sleep CheckTimesPeriod
        end if
    end if
  Loop while Times and (not Connected)

  if Connected then
    CheckRouter = true
  else
    ProcessID = CreateProcess(Client & " " & LocalIP, 1)

    if 0 <> ProcessID then
        WScript.Sleep 2000
        oShell.AppActivate ProcessID
        WScript.Sleep 500
        oShell.SendKeys UserName & chr(13)
        WScript.Sleep 500
        oShell.SendKeys Password & chr(13)
        WScript.Sleep 500
        oShell.SendKeys "reboot" & chr(13)
        WScript.Sleep 500
        oShell.SendKeys "^]"
        WScript.Sleep 100
        oShell.SendKeys "quit" & chr(13)
        WScript.Sleep 100
        call TerminateByPID (ProcessID)
    end if
  End If
End Function

Sub TerminateByPID(PID)
    Dim oWMISvc, oProcess, colProcesses
    Set oWMISvc = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    set colProcesses = oWMISvc.ExecQuery("Select * from Win32_Process WHERE ProcessId=" & PID)
    if colProcesses.Count > 0 then
        For each oProcess in colProcesses
            call oProcess.Terminate
        Next
    end if
End Sub

Function IsOnline (Address)
    On Error Resume Next
    Dim objPing, objStatus
    Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
        ExecQuery("select Replysize from Win32_PingStatus where address = '" & Address & "'")

    For Each objStatus in objPing
        IsOnline = not IsNull(objStatus.ReplySize) or IsOnline
    Next
End Function

Function CreateProcess(cmd, WindowStyle) 'вернет ProcessID
    Dim objWMIService, objStartup, objConfig, objProcess, PID
    Const SW_HIDDEN = 0
    Const SW_NORMAL = 1
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set objStartup = objWMIService.Get("Win32_ProcessStartup")
    Set objConfig = objStartup.SpawnInstance_
    objConfig.ShowWindow = WindowStyle
    Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
    call objProcess.Create (cmd, null, objConfig, PID)
    if not IsNull (PID) then CreateProcess = PID else CreateProcess = 0
End Function
Почитай комментарии, вбивай свои настройки. Можешь подставлять telnet.exe, можешь plink.exe
По-умолчанию, задержки у меня установлены такие:

Подключение проверяется таким образом:
- отправка 1 пакета, затем задержка в 1 секунду (CheckTimesPeriod = 1000),
затем отправка еще 3 пакетов (CheckTimes = 3) с таким же интервалов.
Если хоть один пакет успешно пришел, считается, что подключение есть.
Пинги идут для надежности на 2 адреса - ya.ru и 8.8.8.8

Дальше: (CheckPeriodSuccess = 10000) будет проверять наличие интернета каждые 10 секунд.
Если обрыв связи, роутер идет на перезагрузку и тогда интернет начинает проверяться уже через (CheckPeriodFailure = 120000) 120 секунд.
 

Вложения

fseto

Активный пользователь
Сообщения
1,438
Реакции
318
Баллы
463
и как ясно стало telnet активен по умолчанию
В смысле в роутере?
ставил галочку "Telnet-сервер" но работает и без неё, по этому снял.
Я ж писал, он тебе не нужен)). Telnet-сервер включают на том ПК, к которому желают подключиться с компа, на котором предварительно включили Telnet-клиент. (Думаю теперь ты понял логику)))
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,650
Реакции
5,905
Баллы
1,008

machito

Команда форума
Супер-Модератор
Сообщения
2,358
Реакции
2,174
Баллы
503
Dragokas, это нормально ? два файлика появились.



Скрипт положить в папку к plink.exe и никаких действий не нужно ?
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,387
Реакции
5,877
Баллы
718
Скрипт положить в папку к plink.exe и никаких действий не нужно ?
Да. Положить в ту же папку. Поменять данные авторизации только и можно запускать.
Если тебе каждые 30 минут проверять, то это будет 30 * 60 * 1000 = 1800000 мсек., то есть как все отладишь и убедишься, что правильно работает, можно указать в скрипте:
VB.NET:
CheckPeriodSuccess =1800000
'или
CheckPeriodSuccess =30 * 60 * 1000 'так тоже можно
Скрипт работает бесконечно, т.е. если захочешь его завершить (например, чтоб поменять настройки),
то вырубить его можно только через диспетчер задач. Имя процесса = wscript.exe

Могу переделать, чтоб запускался как консольный, тогда сможешь крестиком закрывать.
Можно и сделать чтоб логировались в файл попытки проверки сети/ перезагрузки роутера.
Dragokas, это нормально ? два файлика появились.
Это от прошлого эксперимента. Можно удалить.
как раз таки без него plink не работал. (коменты внимательнее читай)
Мне это тоже показалось странноватым. Перепроверить бы. Впервые этими фишками пользуюсь. Интересно.
 
Последнее редактирование:

machito

Команда форума
Супер-Модератор
Сообщения
2,358
Реакции
2,174
Баллы
503
Поменять данные авторизации только и можно запускать.
Какие данные, где в модеме, как запускать.... я в ступоре.
Значит сейчас скрипт молчит, так как нет процесса wscript.exe
Можно и сделать чтоб логировались в файл попытки проверки сети/ перезагрузки роутера.
Понятно так лучше.
Мне это тоже показалось странноватым. Перепроверить бы. Впервые этими фишками пользуюсь. Интересно.
сейчас попробую.
 

machito

Команда форума
Супер-Модератор
Сообщения
2,358
Реакции
2,174
Баллы
503
в скрипте - логин и пароль, путь к утилите.. запускать скрипт с расширением vbs наверное.
так сразу сделал. думаю речь идёт за интервал времени в модеме, там есть такая опция при настройке.
как все отладишь и убедишься, что правильно работает, можно указать в скрипте:
Почитай комментарии, вбивай свои настройки. Можешь подставлять telnet.exe, можешь plink.exe
тут я прописал имя утилиты "plink.exe".
fseto, извини ты прав, скрипт работает и без "Telnet-сервер", c одним "telnet клиент".
(хотя опять же не понятно, галочки не было, команды не проходили,
поставил, всё заработало) вот и сейчас снял, перезагрузился, всё работает.
Но, одно но, скрипт то до конца не выполняется, после ввода консоль находится в ожидании >
К примеру вот сейчас ввёл и ждал....... вот что получилось:

 
Последнее редактирование:

Phoenix

Ветеран
Сообщения
2,108
Реакции
1,837
Баллы
503
telnet 192.168.1.1 распознаётся, теперь консоль просит ввести команду.
help что у тебя выводит.
У меня команда exitOnIdle - таймоут. Сессия телнета..
Код:
 > exitOnIdle get
current timout is 600 seconds
А можно же просто конект сделать, зачем ребутить ?
 
Последнее редактирование:
Сверху Снизу