Ожидайте сценарий для связи telnet с маршрутизатором DLink

1189
shivams

Я пытаюсь подключиться к маршрутизатору через telnet с помощью этого сценария:

#!/usr/bin/expect -f  set timeout 20  # router user name set name "admin"  # router password set pass "admin"  # router IP address set routerip "192.168.1.1"  # Read command as arg to this script set routercmd "cat /var/1.leases"   # start telnet spawn telnet $routerip  # send username & password expect "username:" send -- "$name\n" expect "password:" send -- "$pass\n"  # get out of ISP's Stupid menu program, go to shell expect "TBS>>" send -- "sh\n"  # execute command expect -re ".*\$" send -- "$routercmd\n"  # exit send -- "^D" 

Теперь скрипт работает нормально до send -- "sh\n"части. Он попадает в ~ $командную строку, которая выглядит как: (tilda-space-dollar-space). Однако я не могу выполнить команду после этого. Это просто не работает после этого.

Кто-нибудь может сказать почему? Это какая-то ошибка, которую я делаю?

1

1 ответ на вопрос

0
shivams

Хорошо. Я взломал это. Это должно было сделать что-то с неправильным сопоставлением с образцом в expectчасти в последних строках кода.

В первую очередь я сгенерировал записанный скрипт, используя autoexpect. Этот инструмент используется для записи ваших сессий и создания сценария на основе этого. Для этого я сначала установил autoexpectпакет (доступный в expect-devпакете в системах на основе Debian), а затем записал мой сеанс:

sudo apt-get install expect-dev #Since I'm on Ubuntu autoexpect telnet 192.168.1.1 

autoexpectавтоматически сгенерировал скрипт для меня. Когда я запустил этот скрипт, он доходил до выполнения моей команды и выполнял его в маршрутизаторе, но затем не мог выйти. Взяв подсказки из этого сценария и прочитав справочную страницу ожидаемых данных, я наконец понял, что с распознаванием образов возникли некоторые проблемы. Я наконец изменил скрипт соответственно, и вот что наконец работает:

#I am mentioning here only the end part of the complete script which was faulty # execute command expect "~ \$ " send -- "$routercmd\r"  expect "~ \$ " send -- "exit\r"  expect -- "TBS>>" send -- "exit\r"  expect -- "*Are you sure to logout?*"  send -- "y" expect eof 

Итак, извлеченный урок состоял в том, что мы должны использовать autoexpectдля автоматической генерации сценариев. И затем, если есть какая-то ошибка в этих автоматически сгенерированных сценариях, это, скорее всего, будет связано с неправильным распознаванием образов в expectчасти.

В моем случае, по существу, неисправная часть была:

expect -re ".*\$" #WRONG expect "~ \$ " #RIGHT 

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

Похожие вопросы