2010-08-03 99 views
0

我是新来的perl,但是我正在为nagios写一个插件。我有一个简单的get请求失败,但如果我使用snmpwalk尝试相同的请求,它将起作用。当snmpwalk工作时,Perl Net :: SNMP返回noSuchName

我的代码是:

#!/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,它将按照它应该的方式工作。

回答

0

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

2

你已经发现,通过命令行你正在做一个“散步”而不是“获得”。如果您想要在脚本中“获取”某个特定值,请输入标识目标的完整OID。

表格记录中有些东西可能是您想要查看的(并且它看起来像FASTTRAKIDERAID-MIB中的所有内容实际上都是表格式的),所以仅仅使用一个简单的get就是不够的。查看Net::SNMP附带的snmpwalk.pl脚本,或者查看SNMP::Util是否可以轻松提供您正在查找的功能。

1

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

相关问题