0

我是 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,它将按应有的方式工作。

4

3 回答 3

2

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

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

于 2010-08-18T01:31:04.347 回答
1

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

于 2013-03-20T18:19:53.063 回答
0

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

于 2010-08-03T21:25:54.177 回答