【问题标题】:Why doesn't Net::SNMP::Util::OID convert all of my textual OIDs to numeric OIDs?为什么 Net::SNMP::Util::OID 不将我所有的文本 OID 转换为数字 OID?
【发布时间】:2016-06-08 15:51:58
【问题描述】:

我正在尝试使用 Net::SNMP::Util::OID 将我从陷阱中获得的一些 OID 转换为数字点分符号(如 1.3.6.1.2),但并非所有这些 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

【问题讨论】:

    标签: perl snmp


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多