2017-07-20 32 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沒有隻檢索子樹的內置請求類型。

相關問題