当snmpwalk工作时,Perl Net :: SNMP返回noSuchName

时间:2010-08-03 18:01:24

标签: perl snmp nagios

我是perl的新手,但我正在尝试为nagios编写一个插件。我有一个简单的get请求失败,但是如果我用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,它将按预期的方式工作。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我发现了我的问题。当我使用snmpwalk时,它将抓取整个树并返回一个值。 perl模块不会。它不会遍历树到底,即使它下面只有一个东西,它只是说没有。