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

Заработала, поставил галочку Telnet-сервер.
Я прошу проверить именно plink, никакую не putty / puttytel.
Те что по ссылке давали, а именно сейчас puttytel, (но отвечает только на 192.168.1.1)
п.с. а что за plink понять не могу.
 
п.с. а что за plink понять не могу.
извиняюсь не внимательно смотрел на сайте.
Код:
plink -noagent -l admin -pw password 192.168.1.1 reboot
после ввода просит ещё рас ребут.

c171c4c5f770fe76d7688da5714a624d.png

Код:
plink -v -ssh admin@192.168.1.1 -pw "password" exec "reboot"
не выполняет.
 
после ввода просит ещё рас ребут.
В смысле?
То что подчеркнуто красным - это и есть выполняемая команда.
В результате роутер перезагрузился?
(судя по сообщению консоли о том, что роутер внезапно разорвал подключение, то так и есть)
 
Последнее редактирование:
То что подчеркнуто красным - это и есть выполняемая команда.
Нет, это введённая мной, после основного ввода консоль была в ожидании >
и после ввода "reboot" пошла перезагрузка.
 
Последнее редактирование:
Хм.
Давай так попробуем:
Код:
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
 
не одна команда не проходит, вернее 1-я и 3-я в ожидании >
 
Последнее редактирование:
machito, повтори пожалуйста, второй код. Он был введен не в ту консоль.
 
Понятно спасибо. Значит батник сделать не получится.

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

VB.NET / VBA:
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 секунд.
 

Вложения

  • reboot.zip
    1.5 KB · Просмотры: 43
и как ясно стало telnet активен по умолчанию
В смысле в роутере?
ставил галочку "Telnet-сервер" но работает и без неё, по этому снял.
Я ж писал, он тебе не нужен)). Telnet-сервер включают на том ПК, к которому желают подключиться с компа, на котором предварительно включили Telnet-клиент. (Думаю теперь ты понял логику)))
 
Dragokas, это нормально ? два файлика появились.

2596063f2b7fe42713ccb046b8ec902a.png

Скрипт положить в папку к plink.exe и никаких действий не нужно ?
 
Последнее редактирование:
Скрипт положить в папку к plink.exe и никаких действий не нужно ?
Да. Положить в ту же папку. Поменять данные авторизации только и можно запускать.
Если тебе каждые 30 минут проверять, то это будет 30 * 60 * 1000 = 1800000 мсек., то есть как все отладишь и убедишься, что правильно работает, можно указать в скрипте:
VB.NET / VBA:
CheckPeriodSuccess =1800000
'или
CheckPeriodSuccess =30 * 60 * 1000 'так тоже можно
Скрипт работает бесконечно, т.е. если захочешь его завершить (например, чтоб поменять настройки),
то вырубить его можно только через диспетчер задач. Имя процесса = wscript.exe

Могу переделать, чтоб запускался как консольный, тогда сможешь крестиком закрывать.
Можно и сделать чтоб логировались в файл попытки проверки сети/ перезагрузки роутера.
Dragokas, это нормально ? два файлика появились.
Это от прошлого эксперимента. Можно удалить.
как раз таки без него plink не работал. (коменты внимательнее читай)
Мне это тоже показалось странноватым. Перепроверить бы. Впервые этими фишками пользуюсь. Интересно.
 
Последнее редактирование:
Поменять данные авторизации только и можно запускать.
Какие данные, где в модеме, как запускать.... я в ступоре.
Значит сейчас скрипт молчит, так как нет процесса wscript.exe
Можно и сделать чтоб логировались в файл попытки проверки сети/ перезагрузки роутера.
Понятно так лучше.
Мне это тоже показалось странноватым. Перепроверить бы. Впервые этими фишками пользуюсь. Интересно.
сейчас попробую.
 
в скрипте - логин и пароль, путь к утилите.. запускать скрипт с расширением vbs наверное.
так сразу сделал. думаю речь идёт за интервал времени в модеме, там есть такая опция при настройке.
как все отладишь и убедишься, что правильно работает, можно указать в скрипте:
Почитай комментарии, вбивай свои настройки. Можешь подставлять telnet.exe, можешь plink.exe
тут я прописал имя утилиты "plink.exe".
fseto, извини ты прав, скрипт работает и без "Telnet-сервер", c одним "telnet клиент".
(хотя опять же не понятно, галочки не было, команды не проходили,
поставил, всё заработало) вот и сейчас снял, перезагрузился, всё работает.
Но, одно но, скрипт то до конца не выполняется, после ввода консоль находится в ожидании >
К примеру вот сейчас ввёл и ждал....... вот что получилось:

8bd6f30a4bf10e075b713d979cb795c3.png
 
Последнее редактирование:
telnet 192.168.1.1 распознаётся, теперь консоль просит ввести команду.
help что у тебя выводит.
У меня команда exitOnIdle - таймоут. Сессия телнета..
Код:
 > exitOnIdle get
current timout is 600 seconds
А можно же просто конект сделать, зачем ребутить ?
 
Последнее редактирование:
Назад
Сверху Снизу