Войти

Показать полную графическую версию : [решено] Скрипт использующий переменную из файла .txt


Страниц : [1] 2

XXXp
22-04-2011, 01:41
Добрый вечер всем!
Передо мной стоит задача смены 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
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)

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

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

XXXp
22-04-2011, 11:54
Лог выглядит примерно так:
admin

admin

nvram set et0macaddr=Мак

nvram commit

rebootь^AWL-0011223344B0 login:

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

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

amel27
22-04-2011, 12:14
паузы тут не предусмотрено, попробуйте вставить в начале пустые строки (соответствует нажатию ENTER)
какая модель роутера?

XXXp
22-04-2011, 12:16
dlink dir-320 перепрошитый в Asus WL500g

amel27
22-04-2011, 12:22
dlink перепрошитый в Asus »бывает же...
Лог выглядит примерно так »а разве запрос на логин/пароль не высвечивается?

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

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


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

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

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

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

Iska
22-04-2011, 19:02
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» не срослось.

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

amel27
22-04-2011, 19:32
А через ssh команды как-нибудь можно иначе отправить? »
я не имею опыта работы с SSH на PLINK, там посложней будет и больше опций по настройке, вроде еще файл ключа сессии должен использоваться, но с SSH простое перенаправление команд по идее и не должно работать - только через ключ "-m"

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

XXXp
22-04-2011, 19:46
через телнет так и не получается, сначало выводит в командной строке содержание файла, а только затем спрашивает логин, т.е. компьютер не связывает содержание файла как команды или загружает их до того, как роутер спросит логин.

Вот такой 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
Хотя возможно это не подойдет...
С telnet вопрос так и открыт... второй день вожусь, без результата... пробовал по всякому

amel27
24-04-2011, 18:42
Хотя возможно это не подойдет... »почему?... по поводу вопроса:мне кажется помогла бы самая простая пауза в полсекунды »этот вариант на 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
Спасибо, вроде нормально работает, а подскажите по поводу вопроса использования МАК-адреса, взятого из файла c:/mac.txt, где записаны несколько мак адресов и каждый начинается с новой строчки. Маки берутся в произвольном порядке

amel27
25-04-2011, 05:15
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