Показать полную графическую версию : [решено] Скрипт использующий переменную из файла .txt
Добрый вечер всем!
Передо мной стоит задача смены mac адресов на моем роутере со стороны LAN (не WAN), т.е. порта, к которому подключен компьютер мой компьютер. У меня есть некоторая база данных этих мак-адресов. команда для изменения мак-адреса на lan порту выглядит так:
nvram set et0macaddr=МАК адрес на который меняем
nvram commit
reboot
Соответственно, подскажите пожалуйста, если кто в курсе, адрес роутера: 192.168.1.1 (Asus), логин допустим admin, пароль: admin
Как реализовать такую штуку через telnet:
1. подключение к роутеру по ip, логин пароль заданы
2. подается команда, описанная выше (только мак идет как произвольная переменная, которую скрипт берет из файла c:/mac.txt)
3. задача успешно выполнена.
Соответственно в файле mac.txt находятся несколько мак-адресов, каждый начинается с новой строчки, важно чтобы они менялись полностью произвольно.
P.S. нужно для личных целей, ничего плохого, связь с внешним миром полностью отсутствует, все дела происходят только между моими компьютером и моим роутером.
XXXp, попробуйте для начала автоматизировать установку одного адреса:
- скачайте утилиту PLink.exe (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html);
- создайте файл команд ("plink.job"):
admin
admin
nvram set et0macaddr=МАК
nvram commit
reboot
- командная строка:
plink -v -telnet 192.168.1.1 <plink.job
для справки: Using the command-line connection tool Plink (http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter7.html#plink)
Спасибо, но команды в файле .job пролетают слишком быстро, между ними бы паузу. А то запускаю файл, он быстро прокручивает все, а потом только роутер спрашивает логин, или логин успевает отработать, но останавливается на пароле...
быстро прокручивает все »с выводом в файл для анализа:plink -v -telnet 192.168.1.1 <plink.job >plink.logНа моих экземплярах 3COM работает именно такой синтаксис, попробуйте поиграть разными параметрами и ключиками (-L, -M), включить SSH (если поддерживает) - может и получится "оседлать" ваш ASUS... Как крайний случай - писать симулятор нажатий, но это только в интерактивном режиме.
Лог выглядит примерно так:
admin
admin
nvram set et0macaddr=Мак
nvram commit
rebootь^AWL-0011223344B0 login:
т.е. получается команды посылаются до того, как роутер успел их запросить
ключики увы ничего не дают, мне кажется помогла бы самая простая пауза в полсекунды...
паузы тут не предусмотрено, попробуйте вставить в начале пустые строки (соответствует нажатию ENTER)
какая модель роутера?
dlink dir-320 перепрошитый в Asus WL500g
dlink перепрошитый в Asus »бывает же...
Лог выглядит примерно так »а разве запрос на логин/пароль не высвечивается?
P.S. для постинга кода/данных используйте теги CODE
Неа, при запуске сначала идет содержание файла plink.job, а затем сразу роутер предлагает ввести логин. Файл .job пробовал заменять на .txt результат один в один, может проблема в этом, .job должен как-то иначе восприниматься?
admin
admin
nvram set et0macaddr=Мак
nvram commit
rebootь^AWL-0011223344B0 login:
Парадокс, через ssh получилось подключиться (используя опции -l и -pw
но команды так и не отсылаются... Может что-то не так с расширением .job?
XXXp, попробуйте вместо перенаправления ввода "<plink.job" ключ "-m plink.job"
К сожалению, ситуация не изменилась.. А через ssh команды как-нибудь можно иначе отправить?
XXXp, можете попробовать (http://forum.oszone.net/post-1383314.html#post1383314) ещё на всякий случай другое приложение: Telnet Script Executor (http://www.google.ru/search?hl=ru&q=%22Telnet+Script+Executor%22), если с «plink.exe» не срослось.
Спасибо, но не получается(.
Прям странно, у меня есть bat файл, который подключает к роутеру через ssh без проблем и роутер ждет команды, но как её дать автоматически в самом бат файле или подключением аналогичных файлов я не знаю(
А через ssh команды как-нибудь можно иначе отправить? »
я не имею опыта работы с SSH на PLINK, там посложней будет и больше опций по настройке, вроде еще файл ключа сессии должен использоваться, но с SSH простое перенаправление команд по идее и не должно работать - только через ключ "-m"
кстати, в справке описан способ сохранения параметров SSH-соединения (п.7.2.2)
через телнет так и не получается, сначало выводит в командной строке содержание файла, а только затем спрашивает логин, т.е. компьютер не связывает содержание файла как команды или загружает их до того, как роутер спросит логин.
Вот такой vbs скриптик вроде справляется
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "telnet.exe 192.168.1.1"
WScript.Sleep 1000
oShell.SendKeys "admin" & chr(13)
WScript.Sleep 1000
oShell.SendKeys "admin" & chr(13)
WScript.Sleep 1000
oShell.SendKeys "nvram set et0macaddr=00:11:22:33:77:B5" & chr(13)
WScript.Sleep 1000
oShell.SendKeys "nvram commit" & chr(13)
WScript.Sleep 1000
oShell.SendKeys "reboot" & chr(13)
Помогите пожалуйста привести его в божеский вид, я просто изменил под свои цели другой скрипт. Он не выходит после окончания. И вопрос как реализовать то что я говорил вначале темы (произвольный МАК и файла c:/mac.txt)?
Хотя возможно это не подойдет...
С telnet вопрос так и открыт... второй день вожусь, без результата... пробовал по всякому
Хотя возможно это не подойдет... »почему?... по поводу вопроса:мне кажется помогла бы самая простая пауза в полсекунды »этот вариант на VBS работает в моём случае: подключение, выполнение HELP и выход:
Set wss = WScript.CreateObject("WScript.Shell")
Set foo = wss.Exec("plink -v -telnet 192.168.1.1")
WScript.Sleep(500)
foo.StdIn.Write("admin" & vbLF & "password"& vbLF)
WScript.Sleep(500)
foo.StdIn.Write("HELP"& vbLF)
foo.StdIn.WriteLine("LOGOUT")
WScript.Echo(foo.StdOut.ReadAll())
P.S. думаю уже понятно, что реализация зависит от роутера - если он не примет имя/пароль, запросит повторно и скрипт "зависнет"
Спасибо, вроде нормально работает, а подскажите по поводу вопроса использования МАК-адреса, взятого из файла c:/mac.txt, где записаны несколько мак адресов и каждый начинается с новой строчки. Маки берутся в произвольном порядке
XXXp, забыл сказать, что скрипт расcчитан всё-же на запуск из CMD-косоли:CScript /Nologo Script.VBS
Маки берутся в произвольном порядке »это как раз просто:
Set wss = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
' Получение случайного MAC
Randomize
Set foo = fso.OpenTextFile("c:\mac.txt", 1)
arr = Split(foo.ReadAll, vbCrLf)
mac = arr(Int((UBound(arr)+1)*Rnd))
' Подключение и отправка команд на роутер
Set foo = wss.Exec("plink -v -telnet 192.168.1.1")
WScript.Sleep(500)
foo.StdIn.Write("admin" & vbLF & "admin"& vbLF)
WScript.Sleep(500)
foo.StdIn.Write("nvram set et0macaddr="& mac & vbLF)
WScript.Sleep(500)
foo.StdIn.Write("nvram commit"& vbLF)
WScript.Sleep(500)
foo.StdIn.WriteLine("reboot")
' Чтение и вывод лога
WScript.Echo(foo.StdOut.ReadAll())
P.S. последняя строка в файле НЕ должна заканчиваться <ENTER>, иначе последний MAC будет пустым
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.