繁体   English   中英

使用Expect或Shell脚本的Telnet SMTP

[英]Telnet SMTP with expect or shell script

想要与Expect 脚本建立Auth Smtp连接...只是为了测试我想要获取ehlo参数,但Expect不能像这样工作

#!/usr/bin/expect
set timeout -1
set smtp [lindex $argv 0]
set port [lindex $argv 1]
spawn telnet $smtp $port
expect "[2]{2,}[0]{1,}"
send "ehlo\n"

我希望代码220来自邮件服务器,以继续发送ehlo ...

..../...:telnet smtp.mail.yahoo.de 25
Trying 77.238.184.85...
Connected to smtp2-de.mail.vip.ukl.yahoo.com.
Escape character is '^]'.
220 smtp116.mail.ukl.yahoo.com ESMTP
ehlo
250-smtp116.mail.ukl.yahoo.com
250-AUTH LOGIN PLAIN XYMCOOKIE
250-PIPELINING
250-SIZE 41697280
250 8BITMIME

错误说:

spawn telnet smtp.mail.yahoo.de 25
invalid command name "2"
    while executing
"2"
    invoked from within
"expect "[2]{2,}[0]{1,}""
    (file "./login.exp" line 6)

如果我只写期望值“ 220”而不是期望值[[2] {2,} [0] {1,}“,它会起作用,但点火器会发送“ ehlo \\ n”

您需要在发送“ ehlo”后发送换行符:

send "ehlo\n"

编辑:根据您的最新编辑,您还必须转义正则表达式中的前导括号,以防止tcp尝试将其解释为命令:

expect "\[2]{2,}\[0]{1,}"

编辑:另外,您的期望行实际上与您认为的不匹配。 在这一点上,我建议您遍历所有预期的教程,或者仅使用autoexpect生成脚本。

正如上面建议的那样,我使用exp_internal 1来了解期望真正听的内容...我也可以推荐autoexpect ,它创建的期望脚本不是很完美,但是在改进了一些编码之后,它确实是有帮助的,并且终于奏效了。

#!/usr/bin/expect
#exp_internal 1
set timeout -1
set smtp [lindex $argv 0]
set port [lindex $argv 1]
spawn telnet $smtp $port
expect -re {[2]{2,}[0]{1,}}
sleep 3;
send -- "Ehlo\r"
expect -re {[2]{1,}[5]{1,}[0]{1,}}
send -- "quit\r"
expect eof

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM