1

期待スクリプトを使用してAuthSmtp接続を構築したい...テストするためだけにehloパラメータを取得したかったのですが、期待はこのように機能していません

#!/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)

「[2]{2、} [0] {1、}」の代わりに「220」と書くと、機能しますが、無視者は「ehlo\n」を送信します。

4

2 に答える 2

1

上記のアドバイスのように、私は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
于 2012-09-08T07:01:53.523 に答える
0

「ehlo」を送信した後に改行を送信する必要があります。

send "ehlo\n"

編集:最新の編集に基づいて、tcp がコマンドとして解釈しようとするのを防ぐために、正規表現の先頭のブラケットもエスケープする必要があります。

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

編集:また、期待する行は実際にはあなたが思っているものと一致していません。この時点で、expect に関する多くのチュートリアルを実行するか、単純にautoexpectを使用してスクリプトを生成することをお勧めします。

于 2012-09-07T15:36:34.180 に答える