【问题标题】:Using Net::Telnet::Cisco and Net::Ping to skip unreachable hosts使用 Net::Telnet::Cisco 和 Net::Ping 跳过无法访问的主机
【发布时间】:2011-09-21 13:55:45
【问题描述】:

我正在编写一个脚本,它通过数百个瞻博网络路由器并运行一些命令以使用 Net::Telnet::Cisco 显示;但是,列表中的某些路由器无法通过超时停止脚本。

有没有办法跳过无法访问的设备?也许使用 Net::Ping 模组?

我收到的消息:

[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]$ 

【问题讨论】:

  • @cespinoza - 我将如何让它在超时时进入下一个盒子?
  • Parallel:ForkManager 是解决这个问题的简单方法
  • @cespinoza,这是一个服务提供商 mpls 骨干网,不太可能有任何防火墙阻止访问... OP 没有合理的理由让您使用 telnet 到互联网骨干路由器... ssh 有多年来一直可用
  • 是的,我知道.....我们将切换到 ssh,但与此同时,使用 telnet 没有问题。

标签: perl


【解决方案1】:

如果您更改 Net::Telnet::CiscoNet::Telnet 基数的 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 sub 丢失(我在第 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 后)分配 my ($delim, $re) 的 RE 末尾缺少 s

【讨论】:

    猜你喜欢
    • 2013-11-07
    • 1970-01-01
    • 2015-11-21
    • 2018-06-07
    • 2013-02-27
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    相关资源
    最近更新 更多