0

我正在寻找创建一个 Perl 脚本来查看 snmp MIB,提取 MIB 给定参考点的部分,并将结果添加到字符串中。

例如,这是我正在使用的数据的一部分:

      udpOutDatagrams OBJECT-TYPE
          SYNTAX  Counter
          ACCESS  read-only
          STATUS  mandatory
          DESCRIPTION
                  "The total number of UDP datagrams sent from this
                  entity."
          ::= { udp 4 }


      -- the UDP Listener table

      -- The UDP listener table contains information about this
      -- entity's UDP end-points on which a local application is
      -- currently accepting datagrams.

      udpTable OBJECT-TYPE
          SYNTAX  SEQUENCE OF UdpEntry
          ACCESS  not-accessible
          STATUS  mandatory
          DESCRIPTION
                  "A table containing UDP listener information."
          ::= { udp 5 }

      udpEntry OBJECT-TYPE
          SYNTAX  UdpEntry
          ACCESS  not-accessible
          STATUS  mandatory
          DESCRIPTION
                  "Information about a particular current UDP
                  listener."
          INDEX   { udpLocalAddress, udpLocalPort }
          ::= { udpTable 1 }

我正在寻找对象名称,添加逗号,然后是描述:

udpOutDatagrams, The total number of UDP datagrams sent from this entity.
udpTable, A table containing UDP listener information.
udpEntry, Information about a particular current UDP listener.

有一些参考点可以使用:

  1. 所有名称后紧跟字符串“OBJECT-TYPE”。
  2. 所有描述都用双引号括起来,并紧跟在“DESCRIPTION”行之后

我已经整理了一个基本框架来处理这个问题。只需要一些关于用于创建名称/描述字符串的逻辑的建议。

更新:基于 Sinan Ünür 回答的基本脚本。这一切都可以用这个来完成。

#!/usr/local/bin/perl -w
use strict;
use SNMP;
$SNMP::save_descriptions = 1;
my $mib = $ARGV[0];
my $object;

&SNMP::addMibDirs("/usr/share/snmp/mibs/allMibs/");
&SNMP::loadModules($mib);
&SNMP::initMib();

foreach my $key ( keys %SNMP::MIB )
{    
  print "$SNMP::MIB{$key}{label}, $SNMP::MIB{$key}{description}, $SNMP::MIB{$key}{objectID}\n"
};
4

2 回答 2

3

您是否考虑过使用SNMP?它为您提供%SNMP::MIB 哈希

用于访问已解析 MIB 信息的绑定哈希。加载 MIB 后,此散列允许访问已解析的 MIB 元数据(MIB 的结构(即模式))。哈希返回对代表单个 MIB 属性的 SNMP::MIB::NODE 对象的祝福引用。可以使用多种“键”格式获取节点——叶名称(例如,sysDescr)或完全/部分限定名称(例如,system.sysDescr)或完全限定的数字OID。

于 2013-04-11T16:42:57.070 回答
0

正则表达式似乎是最简单的方法。

只需解析文件以查找“OBJECT-TYPE”行,然后将“OBJECT-TYPE”之前的文本作为名称。

之后查找“DESCRIPTION”,然后查找紧随其后的引号之间的文本。

然后重复!

于 2013-04-11T16:39:52.137 回答