我担心 Ubuntu 的最终 MIB 文件集似乎存在语法错误。我是否使用了错误的 MIB?
我用过
sudo apt-get install snmp-mibs-downloader
sudo download-mibs
安装一组运行良好的 MIB,我可以按预期运行 snmpwalk 和 snmptranslate。但是每次运行这些命令时都会看到一些错误,表明 MIB 有一些语法错误。
Bad operator (INTEGER): At line 73 in /usr/share/mibs/ietf/SNMPv2-PDU
Unlinked OID in IPATM-IPMC-MIB: marsMIB ::= { mib-2 57 }
Undefined identifier: mib-2 near line 18 of /usr/share/mibs/ietf/IPATM-IPMC-MIB
Expected "::=" (RFC5644): At line 493 in /usr/share/mibs/iana/IANA-IPPM-METRICS-REGISTRY-MIB
Expected "{" (EOF): At line 651 in /usr/share/mibs/iana/IANA-IPPM-METRICS-REGISTRY-MIB
Bad object identifier: At line 651 in /usr/share/mibs/iana/IANA-IPPM-METRICS-REGISTRY-MIB
Bad parse of OBJECT-IDENTITY: At line 651 in /usr/share/mibs/iana/IANA-IPPM-METRICS-REGISTRY-MIB
仅举一个例子:
Unlinked OID in IPATM-IPMC-MIB: marsMIB ::= { mib-2 57 }
这里的错误是导入时缺少 mib-2。
虽然我可以尝试解决并修复这些错误,但我担心我没有使用正确的 MIB。这些错误肯定不应该发生吧?
我的 snmp.conf 有
mibs +全部
我认为这是必要的,如果像某些人建议的那样,我们注释掉那一行,那么在遍历树时我们似乎无法获得完整的 OID 集。
答案1
您使用的是哪个版本的 Ubuntu?
Ubuntu 可能snmp-mibs-downloader
从 Debian 获取其软件包,而 Debian 对于可再分发性非常严格,因此它snmp-mibs-downloader
从公共来源获取其 MIB,包括互联网中的实际 RFC 和其他标准文档。
然而,其中一些标准文档包含拼写错误和其他错误……在某些情况下,修复这些问题显然需要发布相应标准文档的全新修订版。并且那需要花费大量的时间和精力。(可能有官方勘误表文档,但这些文档的格式不一定适合自动修补。)
在 Debian 中,当前版本snmp-mibs-downloader
包含一个.diff
文件,用于修复各种基于 RFC 的 MIB 中的许多错误,但情况并非总是如此。您包含的错误列表对我来说看起来很熟悉...
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=584657
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=689483
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=689485
所有这些以及更多问题都在 1.1+nmu1 版本中得到了修复snmp-mib-downloader
,该版本最初于 2016 年 9 月发布。如果您使用的是旧版本,并且您的 Ubuntu 版本没有可用的更新,请考虑在具有较新版本软件包的其他计算机上下载 MIB,然后将生成的修复 MIB 复制到您需要的任何位置。
此后,只剩下一个错误:
Bad operator (INTEGER): At line 73 in /usr/share/snmp/mibs/ietf/SNMPv2-PDU
此网页有一个链接到包含修复的 SNMPv2-PDU MIB 文件的 pastebin。修改只是将命名的常量整数值替换max-bindings
为其实际数值,并注释掉常量定义,同样调整 BulkPDU 的定义使其完全独立。这些更改使 net-snmp MIB 解析器感到满意。
如果 pastebin 消失,以下是以输出形式出现的更改diff -u
:
--- SNMPv2-PDU~ 2018-06-05 01:59:07.087962230 +0300
+++ SNMPv2-PDU 2018-06-05 02:18:02.146443255 +0300
@@ -70,7 +70,7 @@
Report-PDU ::= [8] IMPLICIT PDU
-max-bindings INTEGER ::= 2147483647
+-- max-bindings INTEGER ::= 2147483647
PDU ::= SEQUENCE {
request-id INTEGER (-214783648..214783647),
@@ -97,7 +97,7 @@
inconsistentName(18)
},
error-index -- sometimes ignored
- INTEGER (0..max-bindings),
+ INTEGER (0..2147483647),
variable-bindings -- values are sometimes ignored
VarBindList
}
@@ -105,10 +105,11 @@
BulkPDU ::= -- must be identical in
SEQUENCE { -- structure to PDU
request-id INTEGER (-214783648..214783647),
- non-repeaters INTEGER (0..max-bindings),
- max-repetitions INTEGER (0..max-bindings),
+ non-repeaters INTEGER (0..2147483647),
+ max-repetitions INTEGER (0..2147483647),
variable-bindings -- values are ignored
- VarBindList
+ -- VarBindList
+ SEQUENCE (SIZE (0..2147483647)) OF VarBind
}
-- variable binding
@@ -128,6 +129,6 @@
-- variable-binding list
-VarBindList ::= SEQUENCE (SIZE (0..max-bindings)) OF VarBind
+-- VarBindList ::= SEQUENCE (SIZE (0..2147483647)) OF VarBind
END
或者,您可以删除 SNMPv2-PDU MIB 文件,因为它只是 SNMPv2 协议数据单元的正式定义,并且该定义已经内置于大多数 SNMP 工具中。