Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Скрипт использующий переменную из файла .txt (http://forum.oszone.net/showthread.php?t=205384)

XXXp 22-04-2011 01:41 1663579

Скрипт использующий переменную из файла .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. нужно для личных целей, ничего плохого, связь с внешним миром полностью отсутствует, все дела происходят только между моими компьютером и моим роутером.

amel27 22-04-2011 06:27 1663610

XXXp, попробуйте для начала автоматизировать установку одного адреса:

- скачайте утилиту PLink.exe;
- создайте файл команд ("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

XXXp 22-04-2011 10:53 1663745

Спасибо, но команды в файле .job пролетают слишком быстро, между ними бы паузу. А то запускаю файл, он быстро прокручивает все, а потом только роутер спрашивает логин, или логин успевает отработать, но останавливается на пароле...

amel27 22-04-2011 11:21 1663766

Цитата:

Цитата XXXp
быстро прокручивает все »

с выводом в файл для анализа:
Код:

plink -v -telnet 192.168.1.1 <plink.job >plink.log
На моих экземплярах 3COM работает именно такой синтаксис, попробуйте поиграть разными параметрами и ключиками (-L, -M), включить SSH (если поддерживает) - может и получится "оседлать" ваш ASUS... Как крайний случай - писать симулятор нажатий, но это только в интерактивном режиме.

XXXp 22-04-2011 11:54 1663797

Лог выглядит примерно так:
admin

admin

nvram set et0macaddr=Мак

nvram commit

rebootь^AWL-0011223344B0 login:

т.е. получается команды посылаются до того, как роутер успел их запросить

ключики увы ничего не дают, мне кажется помогла бы самая простая пауза в полсекунды...

amel27 22-04-2011 12:14 1663821

паузы тут не предусмотрено, попробуйте вставить в начале пустые строки (соответствует нажатию ENTER)
какая модель роутера?

XXXp 22-04-2011 12:16 1663825

dlink dir-320 перепрошитый в Asus WL500g

amel27 22-04-2011 12:22 1663832

Цитата:

Цитата XXXp
dlink перепрошитый в Asus »

бывает же...
Цитата:

Цитата XXXp
Лог выглядит примерно так »

а разве запрос на логин/пароль не высвечивается?

P.S. для постинга кода/данных используйте теги CODE

XXXp 22-04-2011 12:27 1663837

Неа, при запуске сначала идет содержание файла plink.job, а затем сразу роутер предлагает ввести логин. Файл .job пробовал заменять на .txt результат один в один, может проблема в этом, .job должен как-то иначе восприниматься?

PHP код:

admin  
admin  
nvram set et0macaddr
=Мак  
nvram commit  
rebootь
^AWL-0011223344B0 login


XXXp 22-04-2011 14:11 1663905

Парадокс, через ssh получилось подключиться (используя опции -l и -pw
но команды так и не отсылаются... Может что-то не так с расширением .job?

amel27 22-04-2011 17:50 1663987

XXXp, попробуйте вместо перенаправления ввода "<plink.job" ключ "-m plink.job"

XXXp 22-04-2011 18:01 1663991

К сожалению, ситуация не изменилась.. А через ssh команды как-нибудь можно иначе отправить?

Iska 22-04-2011 19:02 1664011

XXXp, можете попробовать ещё на всякий случай другое приложение: Telnet Script Executor, если с «plink.exe» не срослось.

XXXp 22-04-2011 19:26 1664027

Спасибо, но не получается(.
Прям странно, у меня есть bat файл, который подключает к роутеру через ssh без проблем и роутер ждет команды, но как её дать автоматически в самом бат файле или подключением аналогичных файлов я не знаю(

amel27 22-04-2011 19:32 1664030

Цитата:

Цитата XXXp
А через ssh команды как-нибудь можно иначе отправить? »

я не имею опыта работы с SSH на PLINK, там посложней будет и больше опций по настройке, вроде еще файл ключа сессии должен использоваться, но с SSH простое перенаправление команд по идее и не должно работать - только через ключ "-m"

кстати, в справке описан способ сохранения параметров SSH-соединения (п.7.2.2)

XXXp 22-04-2011 19:46 1664040

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

Вот такой 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)?

XXXp 24-04-2011 01:26 1664688

Хотя возможно это не подойдет...
С telnet вопрос так и открыт... второй день вожусь, без результата... пробовал по всякому

amel27 24-04-2011 18:42 1664977

Цитата:

Цитата XXXp
Хотя возможно это не подойдет... »

почему?... по поводу вопроса:
Цитата:

Цитата XXXp
мне кажется помогла бы самая простая пауза в полсекунды »

этот вариант на 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. думаю уже понятно, что реализация зависит от роутера - если он не примет имя/пароль, запросит повторно и скрипт "зависнет"

XXXp 24-04-2011 23:28 1665119

Спасибо, вроде нормально работает, а подскажите по поводу вопроса использования МАК-адреса, взятого из файла c:/mac.txt, где записаны несколько мак адресов и каждый начинается с новой строчки. Маки берутся в произвольном порядке

amel27 25-04-2011 05:15 1665191

XXXp, забыл сказать, что скрипт расcчитан всё-же на запуск из CMD-косоли:
Код:

CScript /Nologo Script.VBS
Цитата:

Цитата XXXp
Маки берутся в произвольном порядке »

это как раз просто:
Код:

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 будет пустым

XXXp 25-04-2011 11:53 1665336

Спасибо большое, чуть позже протестирую и отпишусь! Ещё раз спасибо

XXXp 26-04-2011 18:24 1666068

Все работает! Спасибо большое ещё раз!

XXXp 03-05-2011 23:09 1669824

Подскажите пожалуйста тогда ещё один небольшой момент:
1. есть команда plink -v -ssh -l admin -pw admin 192.168.1.1
она подключает к роутеру
и
2. есть скрипт на роутере, который запускается командой /usr/local/etc/script.sh

помогите сделать vbs или ещё какой скрипт, который бы просто подключался, вводил команду и отключался
Спасибо!

amel27 04-05-2011 02:10 1669896

XXXp, по аналогии поста #18 не выходит?..

Код:

Set wss = WScript.CreateObject("WScript.Shell")
Set foo = wss.Exec("plink -v -ssh -l admin -pw admin 192.168.1.1")

WScript.Sleep(1000)
foo.StdIn.Write("/usr/local/etc/script.sh"& vbLF)
WScript.Sleep(1000)
foo.StdIn.WriteLine("LOGOUT")

WScript.Echo(foo.StdOut.ReadAll())


XXXp 04-05-2011 12:41 1670060

У меня он подвисал почему-то, видимо из-за того, что не было строчки foo.StdIn.WriteLine("LOGOUT")
Спасибо!

XXXp 16-05-2011 00:55 1677024

Подскажите ещё пожалуйста такой момент: как сделать, чтобы вместо "WScript.Echo(foo.StdOut.ReadAll())" он сохранял эти данные в лог файл c:\log.txt
спасибо

amel27 16-05-2011 03:20 1677060

Цитата:

Цитата XXXp
как сделать, чтобы вместо "WScript.Echo(foo.StdOut.ReadAll())" он сохранял эти данные в лог файл c:\log.txt »

запускать скрипт с выводом в файл:
Код:

CScript /Nologo Script.VBS >c:\log.txt

XXXp 18-05-2011 21:34 1678754

Спасибо!


Время: 20:45.

Время: 20:45.
© OSzone.net 2001-