我正在寻找创建一个查看snmp MIB的Perl脚本,从中提取给定参考点的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.
可以使用一些参考点:
我已经整理了一个基本框架来处理这个问题。只需要一些关于用于创建名称/描述字符串的逻辑的建议。
更新:基于SinanÜnür答案的基本脚本。这一切都可以通过this完成。
#!/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"
};
答案 0 :(得分:3)
您是否考虑过使用SNMP?它会为您提供%SNMP::MIB hash:
用于访问已解析的MIB信息的绑定哈希。在加载MIB之后,该散列允许访问在MIB元数据中解析的(MIB的结构(即,模式))。散列返回对SNMP :: MIB :: NODE对象的祝福引用,这些对象表示单个MIB属性。可以使用多个“密钥”格式(叶子名称(例如,sysDescr)或完全/部分限定名称(例如,system.sysDescr)或完全限定的数字OID)来获取节点。
答案 1 :(得分:0)
正则表达式似乎是最简单的方法。
只需解析文件,找到“OBJECT-TYPE”行,然后将“OBJECT-TYPE”之前的文字作为名称。
之后查找“DESCRIPTION”,然后查找紧跟在之后的引号之间的文本。
然后重复!