2017-07-20 33 views
0
$UsRx = '1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288'; 
    my %table; # Hash to store the results 



    my $res = $session->get_bulk_request(
     -varbindlist => [ $UsRx ], 
     -callback  => [ \&get_callback, \%table ], 
     -maxrepetitions => 80, 
    ); 

    snmp_dispatcher(); 

    if (!defined $res) { 
     printf "ERROR: %s\n", $session->error(); 
     $session->close(); 
     exit 1; 
    } 

    for my $oid (oid_lex_sort(keys %table)) { 
     printf "%s,%s,\n", 
     $index, 
     $table{$oid};     
    } 

注:回调函数不是在这里,但它是一个运行正确的问题似乎与get_bulk_request时需要一个单一的指数数据则忽略给定的指标并返回指数的数据,任何替代解决方案,也可以理解perl的SNMP get_bulk_request函数返回的所有数据的索引,而在终端的OID,snmpwalk的添加索引施加正确的索引数据并非所有

o/p : 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1337,-70 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1338,-75 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1339,-55 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1340,-60 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737289.1337,-75 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737289.1338,-75 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737289.1339,-60 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737289.1340,-65 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737290.1337,-80 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737290.1338,-70 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737290.1339,-65 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737290.1340,-65 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737291.1337,-65 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737291.1338,-55 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737291.1339,-50 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737291.1340,-45 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737293.1337,-15 


Expected o/p : 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1337,-70 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1338,-75 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1339,-55 
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1340,-60 

While this working fine with snmpwalk on terminal 
[email protected]:~$ snmpwalk -v2c -C#543%we 23.9.4.67 1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288 

iso.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1337 = INTEGER: -70 
iso.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1338 = INTEGER: -75 
iso.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1339 = INTEGER: -55 
iso.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1340 = INTEGER: -60 
+1

为了在这里有任何帮助,我们需要知道'$ session'是什么类型的对象。 –

+0

my($ session,$ error)= Net :: SNMP-> session( -version =>'snmpv2c', -nonblocking => 1, -hostname => $ in_hostname, -community => $ in_community, -port => 161, -timeout => 3, -retries => 1 ); @DaveCross如果您熟悉perl snmp请求 –

+1

请不要将代码转储到注释中。堆栈溢出评论不支持代码格式。相反,请[编辑您的问题](https://stackoverflow.com/posts/45211610/edit)添加代码。 –

回答

1

我不知道我正确地解释你的问题,但它听起来像是你询问为什么snmpwalk(CLI工具)仅返回具有。的OID使用与您指定的前缀相同的前缀,而在您的perl代码中使用get-bulk会将OID超出您请求的子树。

这将是预期的行为。 “snmpwalk”不是SNMP请求类型; get-bulk和get-next是。相反,“snmpwalk”是一种专门的工具,它使用get-next或get-bulk和句柄,它本身检测get-bulk或get-next已在您指定的子树外部检索OID并终止漫游。除非您使用的API提供了类似的功能,否则必须在代码中实现此逻辑。该代理正在执行所请求的操作:返回最多80(根据您的代码)varbinds 按字典顺序大于请求OID。 SNMP没有只检索子树的内置请求类型。

相关问题