2016-06-08 117 views
1

我試圖將我從陷阱中獲得的一些OID轉換爲使用Net::SNMP::Util::OID的數字虛線表示法(如1.3.6.1.2),但並非所有這些OID都被轉換。任何人都可以解釋我做錯了什麼嗎?爲什麼Net :: SNMP :: Util :: OID將我的所有文本OID都轉換爲數字OID?

#!/usr/bin/perl 
use strict; 
use warnings; 
use diagnostics; 

use Net::SNMP::Util::OID qw(*); 

printf "%s\n", oid("DISMAN-EVENT-MIB::sysUpTimeInstance"); 
printf "%s\n", oid("sysDescr"); 
printf "%s\n", oid("SNMPv2-MIB::snmpTrapOID.0"); 
printf "%s\n", oid("IF-MIB::linkDown"); 

輸出:

DISMAN-EVENT-MIB::sysUpTimeInstance 
1.3.6.1.2.1.1.1.0 
SNMPv2-MIB::snmpTrapOID.0 
IF-MIB::linkDown 

回答

3

的Net :: SNMP ::的Util :: OID使用hard-coded lookup table,所以它僅適用於在MIB-II和IF-MIB一定的OID。例如,包含IF-MIB::ifName,而IF-MIB::linkDown則不包含。

它不會讓你的前綴MIB名,要麼,所以

oid('ifName') 

作品而

oid('IF-MIB::ifName') 

沒有。


我會推薦使用Perl API to the Net-SNMP library來代替。它允許您加載任意MIB並將OID轉換爲各種格式。

例如:

use strict; 
use warnings 'all'; 
use 5.010; 

use SNMP; 

# Load a MIB not bundled with Net-SNMP 
SNMP::addMibFiles('./Sentry3.mib'); 

my @names = qw(
    linkDown 
    IF-MIB::linkDown 
    SNMPv2-MIB::snmpTrapOID.0 
    systemTotalPower 
); 

foreach my $name (@names) { 
    say "$name: ", SNMP::translateObj($name); 
} 

輸出:

linkDown: .1.3.6.1.6.3.1.1.5.3 
IF-MIB::linkDown: .1.3.6.1.6.3.1.1.5.3 
SNMPv2-MIB::snmpTrapOID.0: .1.3.6.1.6.3.1.1.4.1.0 
systemTotalPower: .1.3.6.1.4.1.1718.3.1.6