プロが教えるわが家の防犯対策術!

ある装置にtelnet接続し、コマンド(ccc dd ee)を送信して帰ってきた値を
outou.dat というファイルに保存するプログラムを作っています。

接続すると

login:

と表示されるので「aaaa」と入力すると

Welcome to aaaa
>

と表示され、「bbbb」と入力するとプロンプトが「#」に変わります。

>bbbb
#

そこでコマンド「ccc dd ee」を入力したときに帰ってくる応答をファイルに保存します。

#ccc dd ee
------応答データ--------


これを行うのに下記プログラムを実行しましたが、エラーは出ませんがファイルに何も
保存されませんでした。
何がいけないのかわかる方教えてください。


use strict;
use Net::Telnet;

my $host = '192.168.1.1';
my $login = 'aaaa';
my $enable = 'bbbb';
my $prompt1 = '/>/';
my $prompt2 = '/\S/';

my $telnet = new Net::Telnet(
Timeout => 10,
);

$telnet->open($host);

$telnet->waitfor('/login:/i');
$telnet->print($login);

$telnet->waitfor($prompt1);
$telnet->print($enable);

$telnet->waitfor($prompt2);

my @result;
$telnet->print("ccc dd ee");
($result) = $telnet->waitfor($prompt2);

open(OUT, "> outou.dat");
print(OUT "@result\n");
close(OUT);

$telnet->close;

A 回答 (1件)

> エラーは出ませんが


本当ですか?

> ($result) = $telnet->waitfor($prompt2);
で使われている $result は宣言されていないようですが。
@resultと$resultは別の変数です。

$resultに取り込んだものを
>print(OUT "@result\n");
と@resultで出力することはできません。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
$resurtと使う場合と@resurtを使う場合の両方を考えていたため、
ここに書くテストプログラムにはごっちゃに書いてしまってました。
実際のプログラムは$resurtで統一されているのでエラーは出ませんでした。

いろいろ試した結果、コマンドの応答が複数ページに渡っていたため、
「何かキーを押してください」のメッセージで止まり、プロンプトが
戻らなかったためタイムアウトになっていました。

お礼日時:2010/02/11 05:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!