使用Net :: Telnet :: Cisco和Net :: Ping跳过无法访问的主机

时间:2011-06-23 21:03:43

标签: perl

我正在编写一个脚本,它通过几百个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]$ 

1 个答案:

答案 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版本有一些错误修复:

  1. 警告初始化行66末尾的/不正确
  2. warnings子缺失(我在第687行添加):

    sub warnings {
        my ($self, $arg) = @_;
        my $stream = $ {*self}{net_telnet_cisco};
        $stream->{warnings} = $arg if defined $arg;
        return $stream->{warnings};
    }
    
  3. 第740行(原始)或746(在warnings之后添加)的RE在最后分配my ($delim, $re)