1

netcatだけで簡単に使用できるプロトコルを使用しています。プロトコルはログイン メッセージで始まるので、stdin の前にログイン メッセージを netcat にパイプする小さなスクリプトを作成できると考えました。

近づくことはできましたが、1 つ問題がわかりません。次のスクリプトは、ログイン メッセージを送信し、netcat と対話できるようにするという点で機能します。しかし、netcat が終了した場合 (サーバー側が接続を閉じたため)、スクリプトはそこでハングします (おそらくcat、誰も stdout を読み取っていないにもかかわらず、まだ stdin を読み取っているため)。

( echo "${LOGIN}"; cat ) | nc ${HOST} ${PORT}
4

1 に答える 1

1

それはトリッキーな問題であり、あなたはその原因について正しい. プロセスは、実際にパイプに書き込もうとするまで、NOPIPE エラーと SIGPIPE を受け取りません。

他に何もない場合は、インタラクション スクリプト ツールを使用できますexpect

expect <(echo '
    spawn nc google.com 80
    send "GET / HTTP/1.0\n"
    send "Host: www.google.com\n"
    interact
')

これが実行されnc、いくつかの HTTP ヘッダーが送信され、制御が渡されます。nc が終了すると、コマンドも終了します。

于 2013-02-15T17:21:11.267 に答える