2010-12-18 27 views
1

我已经编写了一个Perl脚本来放回一些SNMP值,这很好。我现在已经在远程服务器上编写了一个脚本,并使用SNMP中的扩展功能将脚本中的值放入SNMP中。无法在Perl中获得扩展SNMP输出

如果我运行:

snmpget -v2c -c public 10.0.0.10 'NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."cc_power"' 

我得到的结果是:

NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."cc_power" = STRING: 544 

但是,当我尝试使用我的脚本来获取信息反馈不明白这一点。下面是该脚本:

#!/usr/bin/perl  

use strict; 
use SNMP; 
use RRDs; 

my $rrd_db = "/storage/db/rrd/cc_power.rrd"; 

my $sess; 
my $val; 
my $error; 

$sess = new SNMP::Session(DestHost => "10.0.0.10", Community => "public", Version => 2); 
my $power = $sess->get('NET-SNMP-EXTEND-MIB::nsExtendOutput1Line.\"cc_power\"'); 

$error=RRDs::error; 
die "ERROR while updating RRD: $error\n" if $error; 

my $date=time; 
print "Data Script has been run - Output: ${date}:${power}\n"; 

而是返回什么,我不知道为什么......没有任何错误或任何东西,我错过了一些愚蠢的事?

希望有人能帮助,因为这是我发疯:)

+2

使用wireshark检查SNMP get是否从您的脚本正确发送。检查回复,并将其与net-snmp get成功使用时捕获的数据包进行比较。 您还应该启用SNMP调试以查看是否存在某些问题。 $ SNMP :: verbose = 1; $ SNMP :: debugging = 1; – 2010-12-18 23:29:39

+0

嗨,感谢您的想法,但在我发布后,我认为也许我应该尝试OID,它的工作,所以有一些不能很好地翻译... – ard 2010-12-19 00:07:59

回答

2

我假设你使用netsnmp SNMPGET。那么,它会隐藏太多细节,因为它会在后台加载MIB​​文档,并很好地将OID和SNMP值转换为各种用户友好的格式。

所以下次要注意它执行什么样的装饰,并在你自己的代码中模拟这个装饰来达到相同的效果。