Ubuntu 上的 SNMP MIB - MIB 中的错误

Ubuntu 上的 SNMP MIB - MIB 中的错误

我担心 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 工具中。

相关内容