Net::Telnet - perlでtelnet

今時telnetかよっていう感じだけど、一部のNW機器はtelnetしかなかったりするので。で、やってみたんだけどopen、waitforで失敗した場合は有無をいわさず例外で終了するぽい?ので、エラー処理が必要な場合はeval { } で囲めばいいのかな。

  • login
use Net::Telnet

my $prompt = '/\[.+\]\$/';
my $telnet = Net::Telnet->new(
  Timeout   => 10,
  Prompt    => $prompt,
  #Dump_log  => './dump.log',
  #Input_log => './input.log',
);
$telnet->open($host);

my $ok = $telnet->login(
  Name     => $user,
  Password => $pass,
);

  • waitfor

waitforで指定したプロンプトの応答を待って、入力を指定することもできるらすい。ログインプロンプトが特別な場合に利用?ciscoのスイッチとかかな。と思ったらcisco用にはNet::Telnet::Ciscoってのがあった。

use Net::Telnet;
my $prompt = '/\[.+\]/';  # プロンプト(正規表現)

my $telnet = Net::Telnet->new(
  Timeout   => 5,
  Prompt    => $prompt,
  #Dump_log  => './dump.log',
  #Input_log => './input.log',
);
$telnet->open($host);

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

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

$telnet->waitfor($prompt);
print $telnet->cmd($cmd);

$telnet->close;