我正在编写一个脚本,它通过几百个Juniper路由器并运行一些命令来显示使用Net :: Telnet :: Cisco;但是,列表中的某些路由器无法通过超时停止脚本。
有没有办法跳过无法访问的设备?也许使用Net :: Ping mod?
我收到的消息:
[user@server LSP]$ perl lsp_down_script.pl
problem connecting to "<router-name>", port 23: Connection timed out at lsp_down_script.pl line 21
<table border=1><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr>[user@server LSP]$
答案 0 :(得分:0)
如果更改Net::Telnet
Net::Telnet::Cisco
基础的Errmode,您可以获得超时返回(来自我的一个Cisco脚本的代码):
$telnet = new Net::Telnet::Cisco(Timeout => 5, Errmode => 'return');
foreach my $hostid (@listofhosts) {
if (!$telnet->open($hostid)) {
print "\tError on telnet to $hostid: ", $telnet->errmsg(), "\n";
next;
}
# work with device: $telnet->login(), etc
}
注意:我的Net :: Telnet :: Cisco版本有一些错误修复:
/
不正确 warnings
子缺失(我在第687行添加):
sub warnings {
my ($self, $arg) = @_;
my $stream = $ {*self}{net_telnet_cisco};
$stream->{warnings} = $arg if defined $arg;
return $stream->{warnings};
}
第740行(原始)或746(在warnings
之后添加)的RE在最后分配my ($delim, $re)