User Tools

Site Tools


программирование_диалогов_expect

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
программирование_диалогов_expect [2019/08/14 12:04]
val
программирование_диалогов_expect [2022/03/09 12:49]
val [Вариант использования с элементами конфигурации в коде скрипта]
Line 1: Line 1:
 ====== Программирование диалогов expect ====== ====== Программирование диалогов expect ======
  
 +===== Установка =====
 <​code>​ <​code>​
 server# apt install expect server# apt install expect
 +</​code>​
 +
 +===== Cisco CLI =====
 +
 +==== Вариант использования с элементами конфигурации в коде скрипта ====
 +
 +!!! Не обрабатывается ситуация первого подключения (подтверждения ключа)
 +
 +<​code>​
 +server# ssh switchN
  
-server# cat router.exp+server# cat cisco_change_conf.exp
 </​code><​code>​ </​code><​code>​
 #​!/​usr/​bin/​expect #​!/​usr/​bin/​expect
-spawn telnet router+ 
 +set sw [lindex $argv 0]; 
 + 
 +spawn ssh $sw
 send "​\n"​ send "​\n"​
 expect "​sword:"​ { send "​cisco\n"​ } expect "​sword:"​ { send "​cisco\n"​ }
-expect ">" { send "​enable\n"​ } + 
-expect "sword:" { send "cisco\n" } +expect "#" { send "conf t\n" } 
-expect "#"​ { send "copy tftp://​server/​router.acl runn\n"​ }+expect "#"​ { send "ip scp server ​enable\n"​ } 
 +expect "#" { send "end\n" } 
 + 
 +#expect "#"​ { send "vlan database\n"​ } 
 +#expect "#"​ { send "vtp transparent\n"​ } 
 +#expect "#"​ { send "vlan 2 name LAN2\n"​ } 
 +e#xpect "#"​ { send "​exit\n"​ } 
 + 
 +expect "#"​ { send "​write\n"​ } 
 +expect "#"​ { send "​exit\n"​ } 
 +send_user "​\n"​ 
 +exit 0 
 +</​code><​code>​ 
 +server# chmod +x cisco_change_conf.exp 
 + 
 +server# ./​cisco_change_conf.exp switchN 
 +</​code>​ 
 + 
 +==== Вариант использования с элементами конфигурации в файле на tftp сервере ==== 
 +<​code>​ 
 +server# cat /​srv/​tftp/​cisco_change_conf.txt 
 +</​code><​code>​ 
 +ip scp server enable 
 +end 
 +</​code><​code>​ 
 +server# cat cisco_change_conf.exp 
 +</​code><​code>​ 
 +... 
 +expect "#"​ { send "copy tftp://​server/​cisco_change_conf.txt runn\n"​ }
 send "​\n"​ send "​\n"​
 send "​\n"​ send "​\n"​
-expect "#" { send "exit\n" }+... 
 +</​code>​ 
 + 
 +===== Communigate CLI ===== 
 + 
 +<​code>​ 
 +mail# cat cgp_cli.exp 
 +</​code><​code>​ 
 +#​!/​usr/​bin/​expect 
 + 
 +set cmd [lindex $argv 0]; 
 + 
 +spawn telnet localhost 106 
 + 
 +expect "200" { 
 +        ​send "USER postmaster\n" 
 +} 
 + 
 +expect "​300"​ { 
 +        send "PASS Pa\$\$w0rd\n"​ 
 +
 + 
 +expect "​200"​ { 
 +        send "​$cmd\n\n"​ 
 +
 + 
 +expect "​200"​ {} 
 + 
 +sleep 1 
 +send "​QUIT\n"​
 send_user "​\n"​ send_user "​\n"​
 exit 0 exit 0
 </​code><​code>​ </​code><​code>​
-server# chmod +x router.exp+mail# chmod +x cgp_cli.exp
  
-server# ./router.exp+mail# ./cgp_cli.exp '​CREATEACCOUNT user2 {Password = "​password2";​RealName = "​Петр Петрович Петров";​}'​ 
 + 
 +mail# ./​cgp_cli.exp '​GETACCOUNTSETTINGS user2'
 </​code>​ </​code>​
  
 +===== Asterisk AMI =====
 +
 +  * [[http://​the-asterisk-book.com/​1.6/​asterisk-manager-api.html#​manager-interface-beispiel-expect|Example:​ Getting the number of voicemail messages with expect]]
 +<​code>​
 +# cat /​usr/​share/​originate_ami.exp
 +</​code><​code>​
 +#​!/​usr/​bin/​expect
 +
 +set username "​admin"​
 +set secret "​admin"​
 +set host "​127.0.0.1"​
 +set port "​5038"​
 +
 +set channel [lindex $argv 0];
 +set num [lindex $argv 1];
 +set name [lindex $argv 2];
 +
 +send_user "Args: $channel $num $name\n"​
 +
 +spawn telnet $host $port
 +
 +expect "​Manager"​ {
 +        send "​Action:​ Login\n"​
 +        send "​Username:​ $username\n"​
 +        send "​Secret:​ $secret\n\n"​
 +}
 +
 +expect "​Response:​ Success"​ {
 +        send "​Action:​ Originate\n"​
 +        send "​Channel:​ SIP/​$channel\n"​
 +        send "​Context:​ default\n"​
 +        send "​Exten:​ $num\n"​
 +        send "​Callerid:​ $name<​$num>​\n"​
 +        send "​Priority:​ 1\n\n"
 +}
 +
 +sleep 1
 +
 +send "​Action:​ Logoff\n\n"​
 +
 +exit 0
 +</​code><​code>​
 +# /​usr/​share/​originate_ami.exp 403 301 "Hello World"
 +</​code>​
 +
 +===== Docker ======
 +<​code>​
 +webinar BBB# cat /​root/​scripts/​ch_web_pass.exp
 +</​code><​code>​
 +#​!/​usr/​bin/​expect
 +
 +set email [lindex $argv 0];
 +set password [lindex $argv 1];
 +
 +spawn docker exec -it greenlight-v2 bash
 +send "​\n"​
 +expect "​bash*#"​ {send "​bundle exec rails c\n"}
 +expect "​irb*>"​ { send "​User.find_by(email:​ \"​$email\"​).update_attribute(:​password,​\"​$password\"​)\n"​ }
 +expect "​irb*>"​ { send "​exit\n"​ }
 +expect "​bash*#"​ { send "​exit\n"​ }
 +send_user "​\n"​
 +exit 0
 +</​code>​
программирование_диалогов_expect.txt · Last modified: 2022/03/09 12:49 by val