RHL7のperlのプログラムでモジュールを使い、ルータ(BA512R)へtelnet接続し、WAN側のIPアドレスを取得しようと思っています。
プログラムの問題のある行は、
$t->login('user','password');
のようです。
これでも他のTELNETがあるlinuxサーバへは問題なく繋がるのですが、BA512Rへは繋がりません。
通常、telnetを起動し、openを実行すると、user名、password、の順で聞いてきますが、BA512Rは、passwordをいきなり聞かれ、それでログインできます。
この辺が問題なのでしょうか。
しかし、$t->login('','password')としても、BA512Rには繋がりませんでした。
済みませんが、お教えください。
(ちなみに、DDNSサイトを利用してサーバ公開の為のものです。)

A 回答 (2件)

その解釈であっていますよ。


Net::Telnet::waitfor()の引数は,単なる文字列のパターンマッチングです。

$t->waitfor("/passwd.*$/");

なら

${"BA512Rから来る文字列"} =~ "/passwd.*$/";

の条件を満たすまで,待ちつづけるってことです。
そして,条件を満たせば次の行,print()で応答を返してやる。

以下と似たようなもの,と思えば分かりやすいでしょうか?
while (<IN>) {
if ($_ =~ "/passwd.*$/")
last;
}
print();
    • good
    • 0
この回答へのお礼

onosukeさん、ありがとうございました。
お陰さまで、waitforとprintで何とかログインでき、BA512RからWANIPを取り出す事が出来ました。
また宜しくお願いします。

お礼日時:2001/12/01 16:16

loginを使わず。



$t->waitfor('/password/');
$t->print($passwd);

みたいなのでうまくいきませんかね?

この回答への補足

ご回答ありがとうございます。
実はその後、ヤマハさんのページでwaitforとprintの文を見かけ、やってみましたがうまくいっていません。
logonは使わないようにしました。
waitforに、.*$などの正規表現が使われており、理解に苦しんでいる所です。
Net::Telnetのmanは、まだあまり良く見ていないのですが、waitforの()内の文字を受信するのを待って、printで()内の文字を出力する、という解釈でいいのですよね?
度々恐れ入りますが宜しくお願い致します。

補足日時:2001/11/30 09:20
    • good
    • 0

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

今、見られている記事はコレ!

おしトピ編集部からのゆる~い質問を出題中

お題をもっとみる


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ