Jump to content

Recommended Posts

Posted

Добрый день, существует задача - сбор МАС адресов с нескольких 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

Может быть кто-то уже сталкивался с данной проблемой, сбор адресов и знает другие пути решения проблемы?

Posted

А в чем проблема то ? Отправьте сразу штук 5 пробелов
или
expect {
            "--more--" { send -- " "; exp_continue}
            "#" {send -- "exit\r"}
    }

Posted

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)

Posted

Так это уже другой вопрос. Да, он воспринял как опцию, но это определенно решается
Например,
expect {
            -re "*More--" { send -- " "; exp_continue}
            "#" {send -- "exit\r"}
    }


или

expect {
            -re "*-More*" { send -- " "; exp_continue}
            "#" {send -- "exit\r"}
    }

В общем, пробуйте, развивайте извилины.

Posted
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)

Я дико извиняюсь, но я не могу понять в чем проблема, неверно экранирую?

Posted
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 и завершает сценарий.

Posted (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 by perfilov

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.