为什么Net :: SNMP :: Util :: OID不能将我的所有文本OID转换为数字OID?

时间:2016-06-08 15:51:58

标签: perl snmp

我正在尝试使用Net::SNMP::Util::OID将我从陷阱中获得的一些OID转换为数字点符号(如1.3.6.1.2),但并非所有这些都被转换。谁能解释我做错了什么?

#!/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

1 个答案:

答案 0 :(得分: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