Mibble 是一个用于 Java 的开源 SNMP MIB(或 SMI)解析器库。它读取 MIB 文件(采用 ASN.1 语法),并提供 API 来访问所有信息,包括 OID、类型、描述、注释和原始 MIB 源文本。
Mibble 是一个开源的 Java SNMP MIB(或 SMI)解析器库。它读取 MIB 文件(采用 ASN.1 语法),并提供 API 来访问所有信息,包括 OID、类型、描述、注释以及原始 MIB 源文本。
Mibble 捆绑了一套全面的 IANA 和 IETF 标准 MIB、用于格式化和验证的命令行应用程序,以及一个带有简易 SNMP 管理器的图形化 MIB 浏览器。
请访问 https://www.mibble.org/ 获取更多信息。
更多详细信息,请参阅功能列表。
请参阅单独的 doc/install.txt 文件以获取安装和使用说明。
来自 TCP-MIB(RFC 4022)的示例 MIB 源文本:
-- the TCP base variables group
tcp OBJECT IDENTIFIER ::= { mib-2 6 }
-- Scalars
tcpRtoAlgorithm OBJECT-TYPE
SYNTAX INTEGER {
other(1), -- none of the following
constant(2), -- a constant rto
rsre(3), -- MIL-STD-1778, Appendix B
vanj(4), -- Van Jacobson's algorithm
rfc2988(5) -- RFC 2988
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The algorithm used to determine the timeout value used for
retransmitting unacknowledged octets."
::= { tcp 1 }
本文档假定您熟悉SNMP的一些常用概念。如果您不熟悉,可以参考RFC 3411——《SNMP管理框架描述架构》或其他网络资源,了解更多关于SNMP的信息。
Mibble 主要是一个库,但也捆绑了一些小型实用程序——格式化打印器、验证器和 MIB 浏览器。有关如何运行这些程序的信息,请参阅发布文档中的安装说明。
格式化打印器的输出可能不太美观,但它可以轻松提取一些 MIB 字段(用于脚本编写)。它还支持多种输出模式。例如,以下是 TCP-MIB 的 --mibtree 输出:
foo@bar:~/mibble$ bin/MibblePrinter.sh --mibtree TCP-MIB
TCP-MIB
┣━ SNMPv2-SMI
┣━ SNMPv2-CONF
┃ ┗━ SNMPv2-SMI
┗━ INET-ADDRESS-MIB
┣━ SNMPv2-SMI
┗━ SNMPv2-TC
┗━ SNMPv2-SMI
或者,格式化输出程序可以输出 MIB 的完整 OID 树:
foo@bar:~/mibble$ bin/MibblePrinter.sh --oid TCP-MIB
iso(1)
iso(1).org(3)
iso(1).org(3).dod(6)
iso(1).org(3).dod(6).internet(1)
iso(1).org(3).dod(6).internet(1).directory(1)
iso(1).org(3).dod(6).internet(1).mgmt(2)
iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1)
iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).tcp(6)
iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).tcp(6).tcpRtoAlgorithm(1)
...
对美化打印器输出结果可轻松进行的处理显然有限。要对信息进行高级过滤或提取特定特征,需要使用 Mibble 解析库编写专门的应用程序。
要解析 MIB 文件,首先必须创建一个 MIB 加载器。MIB 加载器负责处理加载会话,管理所有导入,并确保每个文件只被加载一次。MIB 加载器还包含一个导入路径,可以对其进行修改以添加包含引用 MIB 文件的目录。
以下是加载 MIB 的简单方法的 Java 源代码。请注意,在本示例中,包含 MIB 文件的目录已添加到导入路径中。
import net.percederberg.mibble.*;
public Mib loadMib(File file)
throws FileNotFoundException, MibLoaderException {
// In real code, a single MibLoader instance should be reused
MibLoader loader = new MibLoader();
// The MIB file may import other MIBs (often in same dir)
loader.addDir(file.getParentFile());
// Once initialized, MIB loading is straight-forward
return loader.load(file);
}
MIB 文件加载完成后,即可访问和处理其内容。以下示例代码演示了一些简单的方法,用于提取具有对象标识符值的所有值符号的名称。有关可用方法和访问器的列表,请参阅 Mibble Java API。
import net.percederberg.mibble.*;
import net.percederberg.mibble.value.*;
public HashMap<String,ObjectIdentifierValue> extractOids(Mib mib) {
HashMap<String,ObjectIdentifierValue> map = new HashMap<>();
for (MibSymbol symbol : mib.getAllSymbols()) {
ObjectIdentifierValue oid = extractOid(symbol);
if (oid != null) {
map.put(symbol.getName(), oid);
}
}
return map;
}
public ObjectIdentifierValue extractOid(MibSymbol symbol) {
if (symbol instanceof MibValueSymbol) {
MibValue value = ((MibValueSymbol) symbol).getValue();
if (value instanceof ObjectIdentifierValue) {
return (ObjectIdentifierValue) value;
}
}
return null;
}
Mibble 采用 GNU GPL 和商业许可双重许可。
本程序以期有用为目的而发布,但不提供任何担保;甚至不提供任何默示担保,包括适销性或特定用途适用性的担保。
详情请参阅单独的 LICENCE.txt 文件。