среда, 2 мая 2012 г.

Модем ZXV10 H108L, telnet и скрипты VBS

image Как известно человеческая лень двигатель прогресса. Иначе бы мы до сих пор ходили бы пешком, отправляли письма почтовой каретой и вставали каждый раз с дивана, желая переключить канал на телевизоре.
Вы спросите а причем тут модем. И так рассказываю. В силу сложившихся обстоятельств модем у меня расположен в прихожей. Ну как работает интернет от “Укртелекома” вы тоже догадываетесь. Так что уютно расположившись на диване с ноутбуком бежать в прихожую при обрыве интернета для перезагрузки модема очень не хочется.
Так как я периодически пописываю разные удобняшки на VBS то естественно в голову пришла идея пообщаться с модемом с помощью скрипта. Оказалось что наш модем прекрасно работает с программой telnet значит будем использовать ее.
Перейдя в консоль запускаем ее. Модем у нас имеет IP адрес 192.168.1.1 для входа в модем в отличии от WEB интерфейса  используются другие  логин и пароль, а именно  root, root.

image

После входа в модем, набрав help видим весь список команд модема. Нас из них пока интересуют только две, а именно reboot и killall.
Создадим пустой файл с именем ну допустим RebootZTE.vbs и вставим в него нижеприведенный код.

Set wshShell = WScript.CreateObject("WScript.Shell")
wshShell.Run "telnet.exe 192.168.1.1"
WScript.Sleep 500
wshShell.SendKeys "root~"
WScript.Sleep 500
wshShell.SendKeys "root~"
WScript.Sleep 500
wshShell.SendKeys "reboot~"

Создав ярлык для этого файла на рабочем столе мы сможем перегрузить модем не вставая с любимого дивана. Все получилось нормально но… после перезагрузки модема окно консоли остается на экране и его приходится закрывать вручную. А это лишние действия. Посмотрим что можно сделать чтобы решить эту проблему. Оказывается в Windows есть такая замечательная вещь как WMI и с ее помощью можно много чего интересного делать. Но нас пока интересует только  закрытие окна оставшегося на экране после работы нашего скрипта. Проблема решаема. WMI может закрывать окна по имени открытого процесса. Что нам и требовалось. Дополняем наш  код.

Set wshShell = WScript.CreateObject("WScript.Shell")
Set oWMI = GetObject("winmgmts:\\.\root\cimv2")
wshShell.Run "telnet.exe 192.168.1.1"
WScript.Sleep 500
wshShell.SendKeys "root~"
WScript.Sleep 500
wshShell.SendKeys "root~"
WScript.Sleep 500
wshShell.SendKeys "reboot~"
WScript.Sleep 5000
Set ProcList = oWMI.ExecQuery("Select * from Win32_Process Where Name = 'telnet.exe'")
    For Each oProc in ProcList
        oProc.Terminate()
    Next

Все теперь наш скрипт перегружает модем и по окончании своей работы закрывает окно.

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


wshShell.SendKeys "reboot~"

Замените на строку

wshShell.SendKeys "killall pppd~"

  UPD 25.06.15
Если у Вас подключение DHCP то вышеприведенная строка не работает и вы можете только перегружать модем.
Если при работе скрипта вы видите такую картинку.








То это говорит о том что у Вас по умолчанию включена русская раскладка клавиатуры.

20 комментариев:

  1. Спасибо, то , что искал, но почему-то на Win7 не работает. Получаю такую ошибку: Строка 3 Символ 1. Не удается найти указанный файл. Код: 80070002 Источник (null)

    ОтветитьУдалить
  2. В третьей строке идет запуск телнет клиента
    В Win 7 он не включен по умолчанию.
    Включите его.
    Панель управления -> Программы и компоненты -> Включение или отключение компонентов Windows
    отметить птичкой Клиент Телнет

    ОтветитьУдалить
  3. Здравствуйте ! А как должен выглядеть скрипт для разрыва сесии, если модем работает по протоколу DHCP ?

    ОтветитьУдалить
  4. По идее wshShell.SendKeys "killall dhcpc~"
    Но у меня не работает поэтому и не публикую.

    ОтветитьУдалить
  5. PPoE Win7 telnet включил,логин пароль ввел...хелп,получаю табл. с командами,что с ней делать дальше?Отдельно создаем файл (текст 1 скопировал)...Нарабочий стол его.Пытаюсь открыть доходит до ввода логина и все.Подскажите что не так делаю?

    ОтветитьУдалить
  6. Этот комментарий был удален автором.

    ОтветитьУдалить
  7. Есть возможность увеличения времени разрыва сессии?

    ОтветитьУдалить
  8. как войти через консоль в роутер?

    ОтветитьУдалить
  9. нажимаю win+r ввожу telnet.exe 192.168.1.1 пишет не удается найти телнет

    ОтветитьУдалить
  10. В компонентах Windows два телнета, сервер и клиент. Включать надо клиента.

    ОтветитьУдалить
  11. Уже руками смог ребутнуть. Но с вашим кодом вылазит вот такая штука в консоли. http://joxi.ru/82QqbgVfMOXj2d

    ОтветитьУдалить
  12. И можно ли как то через батник или другим способом просто менять внейшний ип не перезагружая модем.
    Вот на сайте другом нашел. но он у меня не срабатывает я не знаю почему.
    192.168.1.1 23
    WAIT "Login:"
    SEND "LOGINm"
    WAIT "Password:"
    SEND "PASSm"
    WAIT ">"
    SEND "system restartm"
    SEND "user logoutm"

    ОтветитьУдалить
  13. Такая штука в консоли вылазит при русской раскладке клавиатуры по умолчанию в виндовс.
    Это кусок кода не будет работать.
    Если подключение DHCP то строка wshShell.SendKeys "killall pppd~" бесполезна.

    ОтветитьУдалить
  14. Спасибо большое. Но всё таки вы бы могли сделать такой файл чтобы менять ип не перезагружая модем?Признаюсь мне нужно менять ип чтобы программа safesurf заново показывала сайты.

    ОтветитьУдалить
    Ответы
    1. Я уже писал в коментариях выше что при подключении DHCP нет возможности сменить айпи не перегружая можем, да и перезагрузка не всегда помогает.

      Удалить
  15. Жаль, спасибо большое за помощь!

    ОтветитьУдалить
  16. Очень познавательно! Спасибо, VicNes

    ОтветитьУдалить