【问题标题】:Perl Net::SNMP returns noSuchName when snmpwalk works当 snmpwalk 工作时,Perl Net::SNMP 返回 noSuchName
【发布时间】:2010-08-03 18:01:23
【问题描述】:

我是 perl 的新手,但我正在尝试为 nagios 编写一个插件。我有一个失败的简单获取请求,但如果我用 snmpwalk 尝试相同的请求,它就可以工作。

我的代码是:

#!/usr/bin/perl -w

use strict;
use Net::SNMP;

my $host = '10.10.10.203';  
my $community = 'myComm';  
my $session;  
my $error;    
my $response = undef;  

($session, $error) = Net::SNMP->session(  
  -hostname => $host,  
  -version => 2,  
  -community =>$community,  
  -port => 161,  
  -timeout => 20  
);

my $uptimeOID = '1.3.6.1.2.1.1.3.0';
my $myOID = '1.3.6.1.4.1.7933';

if( !defined( $response = $session->get_request($myOID)))
{
  if( $session->error_status == 2)
  {
    my $sessionError = $session->error;
    print ("($sessionError) OID not supported ($myOID).\n");
  }
}
else
{
  print ("$response");
}

如果我运行这个脚本,它会说 noSuchName 失败,但如果运行:

snmpwalk -v 2c -c myComm 10.10.10.203 1.3.6.1.4.1.7933

我得到了我想要的回应。有人知道为什么这不起作用吗?
如果我使用此脚本检查正常运行时间 OID,它将按应有的方式工作。

【问题讨论】:

    标签: perl snmp nagios


    【解决方案1】:

    您已经通过命令行确定您正在执行“walk”而不是“get”。如果您想在脚本中“获取”特定值,请输入标识目标的完整 OID。

    您可能想要获取表记录中的某些内容(而且 FASTTRAKIDERAID-MIB 中的所有内容似乎实际上都是表格的),因此简单的获取是不够的。查看Net::SNMP 附带的snmpwalk.pl 脚本或查看SNMP::Util 是否可以轻松提供您正在寻找的功能。

    【讨论】:

      【解决方案2】:

      使用 get_next_request,而不是 get_request。它将在您传递它之后返回第一个有效的 oid。

      【讨论】:

        【解决方案3】:

        我发现了我的问题。当我使用 snmpwalk 时,它会抓取整棵树并返回一个值。 perl 模块不会。即使它下面只有一件事,它也不会遍历树到最后,它只是说不。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多