perfilov Posted May 16, 2023 Posted May 16, 2023 Добрый день, существует задача - сбор МАС адресов с нескольких SNR-s2985G-8T (100 штук) в определенном влане и складывание отдельными списками (SNRs2985G.192.168.100.1-100.txt). Сбор необходимо осуществлять на freebsd, запуск скрипта (cron) каждый час через 12 часов. установили expect, создали скрипт для подключения к оборудованию через telnet #!/usr/local/bin/expect -f spawn telnet 192.168.100.2 expect "login:" { send "login\n"} expect "Password:" { send "passwd\n"} expect "#" {send "show mac-address-table vlan 200\n"} send "space\n" expect "#" {send "exit\n"} expect "#" {send "exit\n"} Вроде бы все хорошо, но скрипт ждет от меня нажатия клавиши space несколько раз, что бы отобразить весь список. (--More--) Гуглил, предлагают увеличить количество выводимых символов для вывода всех МАС адресов без нажатия клавиши space Может быть кто-то уже сталкивался с данной проблемой, сбор адресов и знает другие пути решения проблемы? Вставить ник Quote
passer Posted May 16, 2023 Posted May 16, 2023 А в чем проблема то ? Отправьте сразу штук 5 пробелов или expect { "--more--" { send -- " "; exp_continue} "#" {send -- "exit\r"} } Вставить ник Quote
perfilov Posted May 16, 2023 Author Posted May 16, 2023 cat ./telnet.sh #!/usr/local/bin/expect -f spawn telnet 192.168.100.2 expect "login:" { send "login\n"} expect "Password:" { send "passwd\n"} expect "#" {send "show mac-address-table vlan 200\n"} expect { "--more--" { send -- " "; exp_continue} "#" {send -- "exit\r"} } expect "#" {send "exit\n"} expect "#" {send "exit\n"} в итоге имеем. root@testo:/home/user # ./telnet.sh spawn telnet 192.168.100.2 Trying 192.168.100.1... Connected to 192.168.100.1. Escape character is '^]'. Welcome to asw-snr-s2985g8t! login:login Password:************** asw-snr-s2985g8t#bad flag "--more--": must be -glob, -regexp, -exact, -notransfer, -nocase, -i, -indices, -iread, -timestamp, -timeout, -nobrace, or -- while executing "expect { "--more--" { send -- " "; exp_continue} "#" {send -- "exit\r"} }" (file "./telnet.sh" line 6) Вставить ник Quote
passer Posted May 16, 2023 Posted May 16, 2023 Так это уже другой вопрос. Да, он воспринял как опцию, но это определенно решается Например, expect { -re "*More--" { send -- " "; exp_continue} "#" {send -- "exit\r"} } или expect { -re "*-More*" { send -- " "; exp_continue} "#" {send -- "exit\r"} } В общем, пробуйте, развивайте извилины. Вставить ник Quote
perfilov Posted May 16, 2023 Author Posted May 16, 2023 root@testo:/home/user # cat ./telnet.sh #!/usr/local/bin/expect -f spawn telnet 192.168.100.2 expect "login:" { send "login\n"} expect "Password:" { send "passwd\n"} expect "#" {send "show mac-address-table vlan 200\n"} expect { -re "*-More*" { send -- " "; exp_continue} "#" {send -- "exit\r"} } root@testo:/home/user # ./telnet.sh spawn telnet 192.168.100.2 Trying 192.168.100.2... Connected to 192.168.100.2. Escape character is '^]'. Welcome to asw-snr-s2985g8t! login:login Password:************** asw-snr-s2985g8t-koch-19#couldn't compile regular expression pattern: quantifier operand invalid while executing "expect { -re "*-More*" { send -- " "; exp_continue} "#" {send -- "exit\r"} } " (file "./telnet.sh" line 7) Я дико извиняюсь, но я не могу понять в чем проблема, неверно экранирую? Вставить ник Quote
perfilov Posted May 16, 2023 Author Posted May 16, 2023 200 2a-07-a1-35-02-75 DYNAMIC Hardware Ethernet1/0/8 200 2c-4d-54-69-73-a1 DYNAMIC Hardware Ethernet1/0/8 200 2c-4d-54-b5-40-a0 DYNAMIC Hardware Ethernet1/0/8 200 2c-c8-1b-ac-7b-ad DYNAMIC Hardware Ethernet1/0/8 200 2c-f0-5d-38-25-d3 DYNAMIC Hardware Ethernet1/0/8 200 38-6b-1c-72-8f-eb DYNAMIC Hardware Ethernet1/0/8 200 3c-1e-04-8d-88-60 DYNAMIC Hardware Ethernet1/0/8 200 40-8d-5c-95-12-b3 DYNAMIC Hardware Ethernet1/0/8 200 44-8a-5b-6f-95-4a DYNAMIC Hardware Ethernet1/0/8 200 44-8a-5b-a0-a5-05 DYNAMIC Hardware Ethernet1/0/8 --More-- root@testo:/home/user # все равно выводит --More-- висит секунд 10 и завершает сценарий. Вставить ник Quote
StSphinx Posted May 16, 2023 Posted May 16, 2023 @perfilov Как вариант, можно сначала отправить команду: terminal length 0 , а уж потом запрашивать mac таблицу. Вставить ник Quote
perfilov Posted May 16, 2023 Author Posted May 16, 2023 (edited) Цитата Как вариант, можно сначала отправить команду: terminal length 0 , а уж потом запрашивать mac таблицу. все пошло, спасибо большое! #!/usr/local/bin/expect -f spawn telnet 192.168.100.2 expect "login:" { send "login\n"} expect "Password:" { send "passwd\n"} expect "#" {send "terminal length 0\r"} expect "#" {send "show mac-address-table vlan 200\r"} expect "#" {send -- "exit\r"} expect "#" {send -- "exit\r"} Подскажите, а как переделать этот скрипт, чтобы можно было объявить переменную $ip, и spawn telnet 192.168.100.<$ip> и запускать потом скрипт и подставлять цифры к переменной $ip? Cron будет обращаться к скрипту с переменной $ip=[i++], циклично от 1 до 200 и складывать вывод в каждый свой файл с 1 до 200. Edited May 16, 2023 by perfilov Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.