マシンにログインして終了するだけの次の単純な telnet スクリプトを実行しています。
同じスクリプトは、ある Linux サーバーからは (1000 回の反復を経て) 正常に動作しますが、別の Linux サーバーからは (一貫して) 失敗します (たとえば 200 回の試行後に失敗します)。
失敗した場合、失敗するまでの反復回数はさまざまですが、失敗は持続します。
#!/usr/bin/perl
use Net::Telnet;
my $loop = 0;
my $dumpfile = "dump.log";
my $inputfile = "input.log";
for ($loop =1; $loop <=1000; $loop++) {
print "===============Loop: $loop =====================\n";
$telnet = new Net::Telnet ( Timeout=>20, Errmode=>'die');
print "$telnet\n";
$telnet->open('sys-007');
$telnet->dump_log($dumpfile);
$telnet->input_log($inputfile);
$telnet->waitfor('/login: $/i');
$telnet->print('root');
$telnet->waitfor('/Password:$/i');
$telnet->print('007');
sleep 2;
$telnet->print('exit');
print "=================================================\n";
}
スクリプトは次のように終了します。
pattern match read eof at ./telnettest.pl line 15 (i.e, waitfor('/login: $/i'); Line)
何が問題なのかを確認するために、次のことを試しました。
クライアント マシン: (sys-007)
tcpdump -nvvv -w test.txt host <Server IP>
文字列 test.txt には次のものがあります。
試行成功ログ:
sys-007 (ttyp0)
^Fl$4
^!^Fl$
login:
^Fl$4
^Fl$4
root
^(^Fl*
root
bP"u
^Fl*4
bP5u
^.^Fl*
Password:
^Fl*4
^Fl*4
007
^7^Fl6
^Fl64
^9^Fl6
Terminal type? [xterm]
^Fl64
^Fl64
exit
^Fl<4
^Fl<
exit
^Fl<
試行の失敗:
sys-007 (ttyp0)
*^hn
+^hn
ログインなし: プロンプト!
サーバー マシン内: (Linux サーバー)
[telnet@server]~% netstat --inet -a | grep telnet | grep sys-007 There are no TIME_WAIT or CLOSE_WAIT sockets.
何が問題なのかを調べるには、何を調べればよいか教えてください。