当前位置: 技术问答>linux和unix
expect 数组的问题
来源: 互联网 发布时间:2016-09-09
本文导语: 有一个服务器的地址为:192.168.9.9 他可能的密码有5个,现在想用expect程序实现挨个试探密码,直到登陆成功为止。请问改怎么实现。 目前有一个思路就是用递归。但是不知道在expect中怎么实现数组的传递。 其不用...
有一个服务器的地址为:192.168.9.9
他可能的密码有5个,现在想用expect程序实现挨个试探密码,直到登陆成功为止。请问改怎么实现。
目前有一个思路就是用递归。但是不知道在expect中怎么实现数组的传递。
其不用数组时候的程序如下:
set m_i 1
set m_one_ip 192.168.9.9
set m_pw 123456
proc passwordtest { i one_ip pw} {
puts stdout "######### No.$i ######### $one_ip #########"
spawn ssh root@$one_ip
expect {
"want" {send -- "yesr"; exp_continue}
"password:" {send -- "$pwr"; exp_continue}
"No route" { exit }
"gssapi-with-mic" {
incr i
passwordtest $i $one_ip $pw}
"#" {send "exitr"}
}
}
这样就会连续以123456作为试探密码登陆,当然结果一直是错误的,程序到ctrl + c的时候退出。
如果可以实现数组的传递就可以实现我说的功能了。
set m_i 1
set m_one_ip 192.168.9.145
set m_pw(1) 1111111
set m_pw(2) 123456
set m_pw(3) aaaaaa
set m_pw(4) bbbbbb
proc passwordtest { i one_ip pw} {
puts stdout "######### No.$i ######### $one_ip #########"
spawn ssh root@$one_ip
expect {
"want" {send -- "yesr"; exp_continue}
"password:" {send -- "$pw($i)r"; exp_continue}
"No route" { exit }
"gssapi-with-mic" {
incr i
passwordtest $i $one_ip $pw}
"#" {send "exitr"}
}
}
passwordtest $m_i $m_one_ip $m_pw
其作用是递归调用passwordtest子程序,可惜这里pw并不能传递为m_pw数组。
请各位赐教,不胜感激。
他可能的密码有5个,现在想用expect程序实现挨个试探密码,直到登陆成功为止。请问改怎么实现。
目前有一个思路就是用递归。但是不知道在expect中怎么实现数组的传递。
其不用数组时候的程序如下:
set m_i 1
set m_one_ip 192.168.9.9
set m_pw 123456
proc passwordtest { i one_ip pw} {
puts stdout "######### No.$i ######### $one_ip #########"
spawn ssh root@$one_ip
expect {
"want" {send -- "yesr"; exp_continue}
"password:" {send -- "$pwr"; exp_continue}
"No route" { exit }
"gssapi-with-mic" {
incr i
passwordtest $i $one_ip $pw}
"#" {send "exitr"}
}
}
这样就会连续以123456作为试探密码登陆,当然结果一直是错误的,程序到ctrl + c的时候退出。
如果可以实现数组的传递就可以实现我说的功能了。
set m_i 1
set m_one_ip 192.168.9.145
set m_pw(1) 1111111
set m_pw(2) 123456
set m_pw(3) aaaaaa
set m_pw(4) bbbbbb
proc passwordtest { i one_ip pw} {
puts stdout "######### No.$i ######### $one_ip #########"
spawn ssh root@$one_ip
expect {
"want" {send -- "yesr"; exp_continue}
"password:" {send -- "$pw($i)r"; exp_continue}
"No route" { exit }
"gssapi-with-mic" {
incr i
passwordtest $i $one_ip $pw}
"#" {send "exitr"}
}
}
passwordtest $m_i $m_one_ip $m_pw
其作用是递归调用passwordtest子程序,可惜这里pw并不能传递为m_pw数组。
请各位赐教,不胜感激。
|
很牛嘛 你
都没在expect用过数组
都没在expect用过数组