私は次の問題を解決しようとしています:Netcatを使用して特定のIPアドレスとポート番号に接続します。「パスワードの入力:」というプロンプトが表示されたら、パスワードを入力します。次に、リモートマシンは2行のテキスト(1ランダム)をエコーします。私の仕事は、タイムアウトする前にこれらのメッセージをホストに送り返して終了することです。
コマンドライン(ローカル)から読み取り、それらの行にデータをリモートマシンに送り返す、単純なスクリプトでこれを実行できるはずです。私は次のようなperlスクリプトを試してみました:
#!/bin/perl -w;
use strict;
use warnings;
my $PASSWORD = "password";
my $timeout = 20;
my $timenow = time;
while (time - $timenow < $timeout) {
while (my $input = <STDIN> ) {
if ($input =~ "password") {
print $PASSWORD . "\n";
} else {
print $input;
}
}
}
次に、以下を実行します。
nc <address> <port> | ./perlscript.pl
これは私の端末にパスワードを印刷するところまで行きますが、その後失敗します。少し調べてみると、パスワードが実際にはリモートマシンに送信されていないように見えます。
echo "PASSWORD" | nc <address> <port> | ./perlscript.pl
パスワードプロンプトを通り過ぎて、リモートマシンが送信するメッセージを出力しますが、実際には返送されていないように見えます。
誰かが私がこの目標を達成する方法について何か考えを持っていますか?ある種のmknodeパイプを使用すると、I / Oをリモートマシンに再生するのに役立つようですが、その方法がわかりませんか?
また、このアプローチには根本的な欠陥がある可能性が高いので、これを解決する方法について他の提案を受け入れますか?
ありがとう、
マット