使用第三方MIB文件
net-snmp 工具可以使用 MIB 描述文件将数字对象标识 (OID) 转换为文本对象标识符。 net-snmp 工具包提供了一些标准 MIB,但肯定不包含第三方厂商MIB。
查看MIB加载路径:
首先,应该了解工具加载 MIB 的路径。 默认情况下,它从以下目录列表中加载内容:
$HOME/.snmp/mibs
/usr/local/share/snmp/mibs
请注意,许多版本会更改默认路径。 要找出自己系统上使用了哪些目录,以下命令查看:(如果不起作用,是因为你的net-snmp版本没有打包 net-snmp-config)
net-snmp-config --default-mibdirs
放入MIB库文件:
假如你有一个名为 MAIPU-PPP-MIB的 MIB,您想对其进行解析。现在,选择一个你要翻译但当前不能翻译的节点。 从MAIPU-PPP-MIB中,我会选择节点pppPc举例。
首先,证实一下 snmptranslate 命令还不能翻译这个节点:
snmptranslate -IR -On pppPc
Unknown object identifier: pppPc
- 修改MIB文件后缀为.TXT类型
- 使用工具Win.SCP将MIB库文件放到linux文件系统中。
下载MAIPU-PPP-MIB文件并将其放置在我们 snmp 工具的mibs目录中。我将该文件放置在/usr/local/share/snmp/mibs中。(可将MIB文件后缀自行修改)
现在使用 -m 标志来 snmptranslate 告诉它加载哪个mib。 使用:“-m +MAIPU-PPP-MIB”来表示我们希望该工具不仅加载默认的 mib 集,而且还加载 MAIPU-PPP-MIB集。
snmptranslate –m +MAIPU-PPP-MIB -IR -On pppPc
.1.3.6.1.4.1.5651.3.5.1.1.27
成功!
还可以强制加载给定的MIB及其节点。
% snmptranslate -On MAIPU-PPP-MIB::pppPc
.1.3.6.1.4.1.5651.3.5.1.1.27
到此就可以正常翻译加载到net-snmp工具的MIB,但这只是暂时的。
如何使其长期使用:
- 找到或创建snmp.conf文件。
该文件可以放置在系统范围的配置位置(/usr/local/share/snmp.conf)或个人文件($HOME/.snmp/snmp.conf)中。 配置文件位置取决于 Net-SNMP 在你的系统上创建的位置。 运行 net-snmp-config --snmpconfpath 显示路径列表。(MAIPU-MIB就是MIB的名称)
- 编辑配置文件。
将以下命令放在 snmp.conf 文件中,格式为mibs +MIB名称。(MIB名称在MIB文件中已经定义好了,见如何查看MIB。)
如果没有此文件,创建一个并进行编辑 vi /usr/local/share/snmp.conf
mibs +MAIPU-MIB
mibs + MAIPU-PPP-MIB
还可以用以下方式来加载所有MIB文件-这可以节省你的时间。(如果MIB文件较多,会明显产生卡顿,这种情况建议用上一种方法,我已经将目前大部分MIB名称整理出来,见附件snmp.conf)
编辑snmp.conf文件,添加如下信息并保存退出:
mibs +ALL
然后在设备上执行以下命令来指定加载snmp.conf中添加的MIB
echo "mibs +ALL" >> usr/local/share/snmp.conf
然后就可以对设备进行walk操作了。
% snmpwalk -v2c -c public 130.255.24.100
如何查看模块MIB名称:
以下是MIB文件中部分信息。蓝色字段即为MIB名称,很明显的标志是,后面带有::=BEGIN字段
UCD-TRAP-TEST-MIB DEFINITIONS ::= BEGIN
IMPORTS ucdExperimental FROM UCD-SNMP-MIB;
Snmptranslate使用
SNMP 协议倾向于使用数字 OID 和原始值。 MIB 文件的主要作用之一是将它们转换为更有意义的文本名称和合理格式化的值。
虽然大多数 Net-SNMP 命令行应用程序可以控制 SNMP 查询结果的显示方式,但有一种工具 (snmptranslate) 可以独立使用,仅显示从 MIB 文件本身提取的信息。
OID转换
snmptranslate 将数字 OID 翻译显示成对应的 MIB 名称:
% snmptranslate .1.3.6.1.2.1.1.3.0
SNMPv2-MIB::sysUpTime.0
它还可以执行反向翻译,获取文本 MIB 名称并显示数字 OID。 使用 -On 标志:
% snmptranslate -On SNMPv2-MIB::sysUpTime.0
.1.3.6.1.2.1.1.3.0
使用 -Of 标志显示 MIB 子标识符名称的完整列表:
% snmptranslate -Of SNMPv2-MIB::sysUpTime.0
.iso.org.dod.internet.mib-2.system.sysUpTime.0
注意,这些标志决定了 OID 应该如何显示,而不管它最初是如何指定的:
% snmptranslate .iso.3.6.1.private.enterprises.2021.2.1.prNames.0
NET-SNMP-MIB::prNames.0
% snmptranslate -On .iso.3.6.1.private.enterprises.2021.2.1.prNames.0
.1.3.6.1.4.1.2021.2.1.2.0
% snmptranslate -Of .iso.3.6.1.private.enterprises.2021.2.1.prNames.0
.iso.org.dod.internet.private.enterprises.ucdavis.procTable.prEntry.prNames.0
指定 MIB 对象
上面的示例通过提供 MIB 子标识符(数字、文本或混合)的完整列表,或通过指定包含所需 MIB 对象的相关 MIB 模块来标识特定对象。 然而,MIB 对象在 IETF 标准 MIB 中保证是唯一的(并且很少在供应商提供的 MIB 中重复)。 因此,通常只需给出裸 MIB 对象名称即可,无需进一步限定。 Snmptranslate 使用 -IR 标志来执行此“随机访问”查找:
% snmptranslate sysUpTime
Invalid object identifier: sysUpTime
% snmptranslate -IR sysUpTime
SNMPv2-MIB::sysUpTime
(其他命令默认执行此操作 - 只有 snmptranslate 需要显式打开它)。
甚至可以提供正则表达式模式,并让 snmptranslate(或其他命令行工具)进行“最佳匹配”搜索以找到合适的 MIB 对象。 使用 -Ib 标志:
% snmptranslate -Ib 'sys.*ime'
system.sysUpTime
这些方法确实存在选择错误 MIB 对象的风险。 使用最开始的方式是最好的。
要获取与给定模式匹配的所有节点的列表,使用 -TB 标志:
% snmptranslate -TB 'sys.*ime'
SNMPv2-MIB::sysORUpTime
SNMPv2-MIB::sysUpTime
HOST-RESOURCES-MIB::hrSystemUptime
查看更多信息
要获取有关特定 MIB 节点的扩展信息,请使用 -Td 标志显示 MIB 文件中的完整描述:
% snmptranslate -On -Td SNMPv2-MIB::sysUpTime
.1.3.6.1.2.1.1.3
sysUpTime OBJECT-TYPE
-- FROM SNMPv2-MIB, RFC1213-MIB
SYNTAX TimeTicks
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The time (in hundredths of a second) since the network
management portion of the system was last re-initialized."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) 3 }
这可以与前面描述的其他标志结合使用:
% snmptranslate -On -Td -IR sysUpTime
% snmptranslate -On -Td -Ib 'sys.*ime'
给出相同的结果。
最后,可以使用 -Tp 标志显示 MIB 树的选定子集图:
% snmptranslate -Tp -IR system
+--system(1)
|
+-- -R-- String sysDescr(1)
| Textual Convention: DisplayString
+-- -R-- ObjID sysObjectID(2)
+-- -R-- TimeTicks sysUpTime(3)
+-- -RW- String sysContact(4)
| Textual Convention: DisplayString
+-- -RW- String sysName(5)
| Textual Convention: DisplayString
+-- -RW- String sysLocation(6)
| Textual Convention: DisplayString
+-- -R-- Integer sysServices(7)
+-- -R-- TimeTicks sysORLastChange(8)
| Textual Convention: TimeStamp
|
+--sysORTable(9)
|
+--sysOREntry(1)
|
+-- ---- Integer sysORIndex(1)
+-- -R-- ObjID sysORID(2)
+-- -R-- String sysORDescr(3)
| Textual Convention: DisplayString
+-- -R-- TimeTicks sysORUpTime(4)
Textual Convention: TimeStamp
这显示了指定子树中每个 MIB 对象的可访问性(只读或读写)、语法、名称和子标识符,以及这些 MIB 对象的内部结构。
运行不带 OID 参数的 snmptranslate -Tp 将完整显示已知 MIB 树的此信息。 (谨慎使用)