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
программирование_диалогов_expect [2019/08/15 09:17]
val
программирование_диалогов_expect [2022/03/09 12:49] (current)
val [Вариант использования с элементами конфигурации в коде скрипта]
Line 6: Line 6:
 </​code>​ </​code>​
  
-===== Вариант использования с элементами конфигурации в коде скрипта =====+===== Cisco CLI ===== 
 + 
 +==== Вариант использования с элементами конфигурации в коде скрипта ==== 
 + 
 +!!! Не обрабатывается ситуация первого подключения (подтверждения ключа) 
 <​code>​ <​code>​
-server# cat sw.exp+server# ssh switchN 
 + 
 +server# cat cisco_change_conf.exp
 </​code><​code>​ </​code><​code>​
 #​!/​usr/​bin/​expect #​!/​usr/​bin/​expect
Line 17: Line 24:
 send "​\n"​ send "​\n"​
 expect "​sword:"​ { send "​cisco\n"​ } expect "​sword:"​ { send "​cisco\n"​ }
 +
 expect "#"​ { send "conf t\n" } expect "#"​ { send "conf t\n" }
 expect "#"​ { send "ip scp server enable\n"​ } expect "#"​ { send "ip scp server enable\n"​ }
 expect "#"​ { send "​end\n"​ } expect "#"​ { send "​end\n"​ }
 +
 +#expect "#"​ { send "vlan database\n"​ }
 +#expect "#"​ { send "vtp transparent\n"​ }
 +#expect "#"​ { send "vlan 2 name LAN2\n"​ }
 +#expect "#"​ { send "​exit\n"​ }
 +
 expect "#"​ { send "​write\n"​ } expect "#"​ { send "​write\n"​ }
 expect "#"​ { send "​exit\n"​ } expect "#"​ { send "​exit\n"​ }
Line 25: Line 39:
 exit 0 exit 0
 </​code><​code>​ </​code><​code>​
-server# chmod +x sw.exp+server# chmod +x cisco_change_conf.exp
  
-server# ./sw.exp switchN+server# ./cisco_change_conf.exp switchN
 </​code>​ </​code>​
  
-===== Вариант использования с элементами конфигурации в файле на tftp сервере ​=====+==== Вариант использования с элементами конфигурации в файле на tftp сервере ====
 <​code>​ <​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/​router.acl runn\n"​ }+expect "#"​ { send "copy tftp://​server/​cisco_change_conf.txt runn\n"​ }
 send "​\n"​ send "​\n"​
 send "​\n"​ send "​\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"​
 +exit 0
 +</​code><​code>​
 +mail# chmod +x cgp_cli.exp
 +
 +mail# ./​cgp_cli.exp '​CREATEACCOUNT user2 {Password = "​password2";​RealName = "​Петр Петрович Петров";​}'​
 +
 +mail# ./​cgp_cli.exp '​GETACCOUNTSETTINGS user2'
 +</​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>​ </​code>​
программирование_диалогов_expect.1565849830.txt.gz · Last modified: 2019/08/15 09:17 by val