我需要使用自动登录到 TELNET 会话expect,但我需要处理同一用户名的多个密码。
这是我需要创建的流程:
- 打开与 IP 的 TELNET 会话
- 发送用户名
- 发送密码
- 密码错误?再次发送相同的用户名,然后发送不同的密码
- 此时应该已经成功登录了...
对于它的价值,这是我到目前为止所得到的:
#!/usr/bin/expect
spawn telnet 192.168.40.100
expect "login:"
send "spongebob\r"
expect "password:"
send "squarepants\r"
expect "login incorrect" {
expect "login:"
send "spongebob\r"
expect "password:"
send "rhombuspants\r"
}
expect "prompt\>" {
send_user "success!\r"
}
send "blah...blah...blah\r"
不用说,这行不通,而且看起来也不太漂亮。来自我与 Google 的冒险经历expect似乎是一种黑暗艺术。预先感谢任何人就此事提供帮助!
不得不推荐的是探索期待 http://oreilly.com/catalog/9781565920903这本书对于所有程序员来说都是无价的。
我重写了你的代码:(未经测试)
proc login {user pass} {
expect "login:"
send "$user\r"
expect "password:"
send "$pass\r"
}
set username spongebob
set passwords {squarepants rhombuspants}
set index 0
spawn telnet 192.168.40.100
login $username [lindex $passwords $index]
expect {
"login incorrect" {
send_user "failed with $username:[lindex $passwords $index]\n"
incr index
if {$index == [llength $passwords]} {
error "ran out of possible passwords"
}
login $username [lindex $passwords $index]
exp_continue
}
"prompt>"
}
send_user "success!\n"
# ...
exp_continue
循环回到expect块的开头——它就像一个“重做”语句。
注意send_user
以。。结束\n
not \r
你不必逃避>
提示符中的字符:对于 Tcl 来说并不特殊。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)