Итак, во первых - самый простой способ автоматизировать командную строку это WScript.Shell объект (он всегда есть в винде, с ним легко работать из под vbscript). Во вторых - для упрощения работы нам нужно отказаться от ssh (т.к. автоматическая настройка putty это ненужный гемор) и пользовать telnet (который включается через UI роутера).
И в третьих - нужно как-то обойти вот этот пункт : "Go back to web UI, Main->PPPoE Information->Restart service". Тут пришлось применять метод научного тыка - полазив по папкам файловой системы роутера я нашел такой файл - pppd. Википедия говорит что это демон point-to-point соединения (бинго!). Путем проб и ошибок выяснилось что для перезапуска pppoe соединения достаточно просто прибить процесс pppd (killall pppd) - затем роутер сам все перезапустит.
Итак - все необходимое есть и работает, можно делать скрипт. Создаем пустой текстовый файл, пишем туда следующий псевдо-код:
Set oShell = CreateObject("WScript.Shell")Сохраняем полученный файл с расширением .vbs и радуемся - теперь чтоб настроить IPTV достаточно лишь запустить этот файлик.
oShell.run"cmd.exe"
WScript.Sleep 400
oShell.SendKeys"telnet 192.168.1.1"
oShell.SendKeys("{Enter}")
WScript.Sleep 300
'логин
oShell.SendKeys"ubnt"
oShell.SendKeys("{Enter}")
WScript.Sleep 300
'пароль
oShell.SendKeys"ubnt"
oShell.SendKeys("{Enter}")
WScript.Sleep 500
oShell.SendKeys"killall udhcp"
oShell.SendKeys("{Enter}")
WScript.Sleep 5000
oShell.SendKeys"udhcpc -i eth1 -s /usr/etc/udhcpc/udhcpc -b"
oShell.SendKeys("{Enter}")
WScript.Sleep 20000
oShell.SendKeys("killall pppd")
oShell.SendKeys("{Enter}")
WScript.Sleep 25000
oShell.SendKeys"vi /etc/igmpproxy.conf"
oShell.SendKeys("{Enter}")
WScript.Sleep 1000
oShell.SendKeys":1,$s/ppp0/eth1/"
oShell.SendKeys("{Enter}")
WScript.Sleep 2000
oShell.SendKeys":wq"
oShell.SendKeys("{Enter}")
WScript.Sleep 2000
oShell.SendKeys"killall igmpproxy"
oShell.SendKeys("{Enter}")
WScript.Sleep 1000
oShell.SendKeys"killall igmpproxy"
oShell.SendKeys("{Enter}")
WScript.Sleep 1000
oShell.SendKeys"igmpproxy"
oShell.SendKeys("{Enter}")
WScript.Sleep 5000
ProcessClose("cmd.exe")
ProcessClose("telnet.exe")
Function ProcessClose(sProcName)
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & sProcName & "'")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
End Function
PS: неперевариваю линуксы.
3 комментария:
Классное колесо получилось))
Но я бы просто накатил на роутер DD-WRT
Мини инструкция:
делаем сброс «30/30/30».
ставим ip 192.168.1.254 маску 255.255.255.0
зажимаем на роутере reset и не отпуская его подключаем кабель в WAN-порт. reset держим еще 10 секунд.
пингуем 192.168.1.20 — как только ответит, то...
с помощью tftp-клиента отправляем туда прошивку вот ftp://dd-wrt.com/others/eko/BrainSlayer-V24-preSP2/2011/03-17-11-r16454/ubnt_AirRouter/
после того, как она туда закачается, оставим роутер в покое минут на 5-7, а затем уже можно воткнуть кабель в LAN и проследовать по адресу 192.168.1.1
Ну - DD-WRT я тоже рассматривал, но в виду особой ленивости пока решил остаться на стоковой (к тому же окромя dual access меня в ней все устраивает)
Вот http://jerrymannel.com/blog/2008/11/11/telnet-scripting-tool-aka-tst10exe/ есть маленькая софтинка, которая отправляет телнет команды в фоне, я ей когда то пользовался, а главное ей не помешает внезапное сообщение в ICQ или предложение антивируса обновиться.
Ну или еще как вариант можно через Socket.DoTelnetEmulation напрямую посылать команды в телнет, но тогда нужно установить w3sockets.
Отправить комментарий