纯Python实现的SNMP/SMI MIB解析和转换库。
项目描述
SNMP MIB 编译器
PySMI是SNMP SMI MIB解析器的纯Python实现。该工具旨在将ASN.1 MIB转换为各种格式。目前,可以从ASN.1 MIB生成JSON和PySNMP模块。
功能
- 理解SMIv1、SMIv2和实际SMI方言
- 将MIB转换为PySNMP类和JSON文档
- 维护多个MIB模块的MIB对象索引
- 自动从本地目录、ZIP存档和HTTP服务器拉取ASN.1 MIB
- 100% Python,与Python 3.8+兼容
PySMI文档可在PySMI网站找到。
如何使用PySMI
如果您使用PySNMP,您可能永远不会注意到PySMI的存在 - PySNMP在幕后调用PySMI进行MIB下载和编译(您仍然可以通过调用mibdump工具手动执行此操作)。
要将ASN.1 MIB转换为JSON文档,请像这样调用mibdump工具
$ mibdump --generate-mib-texts --destination-format json IF-MIB
Source MIB repositories: file:///usr/share/snmp/mibs, https://mibs.pysnmp.com/asn1/@mib@
Borrow missing/failed MIBs from: https://mibs.pysnmp.com/json/fulltexts/@mib@
Existing/compiled MIB locations:
Compiled MIBs destination directory: .
MIBs excluded from code generation: RFC-1212, RFC-1215, RFC1065-SMI, RFC1155-SMI,
RFC1158-MIB, RFC1213-MIB, SNMPv2-CONF, SNMPv2-SMI, SNMPv2-TC, SNMPv2-TM
MIBs to compile: IF-MIB
Destination format: json
Parser grammar cache directory: not used
Also compile all relevant MIBs: yes
Rebuild MIBs regardless of age: yes
Do not create/update MIBs: no
Byte-compile Python modules: no (optimization level no)
Ignore compilation errors: no
Generate OID->MIB index: no
Generate texts in MIBs: yes
Keep original texts layout: no
Try various filenames while searching for MIB module: yes
Created/updated MIBs: IANAifType-MIB, IF-MIB, SNMPv2-MIB
Pre-compiled MIBs borrowed:
Up to date MIBs: SNMPv2-CONF, SNMPv2-SMI, SNMPv2-TC
Missing source MIBs:
Ignored MIBs:
Failed MIBs:
从IF-MIB模块构建的JSON文档将包含如下信息
{
"ifMIB": {
"name": "ifMIB",
"oid": "1.3.6.1.2.1.31",
"class": "moduleidentity",
"revisions": [
"2007-02-15 00:00",
"1996-02-28 21:55",
"1993-11-08 21:55"
]
},
// ...
"ifTestTable": {
"name": "ifTestTable",
"oid": "1.3.6.1.2.1.31.1.3",
"nodetype": "table",
"class": "objecttype",
"maxaccess": "not-accessible"
},
"ifTestEntry": {
"name": "ifTestEntry",
"oid": "1.3.6.1.2.1.31.1.3.1",
"nodetype": "row",
"class": "objecttype",
"maxaccess": "not-accessible",
"augmention": {
"name": "ifTestEntry",
"module": "IF-MIB",
"object": "ifEntry"
}
},
"ifTestId": {
"name": "ifTestId",
"oid": "1.3.6.1.2.1.31.1.3.1.1",
"nodetype": "column",
"class": "objecttype",
"syntax": {
"type": "TestAndIncr",
"class": "type"
},
"maxaccess": "read-write"
},
// ...
}
一般来说,转换后的MIB捕获了原始(ASN.1)MIB内容的各个方面和布局。上面的代码片段只是部分示例,但这里是完整的IF-MIB.json文件。
除了一对一的MIB转换,PySMI库还可以生成JSON索引,以方便在大量MIB文件中快速查找MIB信息。
例如,IP-MIB.json、TCP-MIB.json和UDP-MIB.json模块的JSON索引会包含如下信息
{
"compliance": {
"1.3.6.1.2.1.48.2.1.1": [
"IP-MIB"
],
"1.3.6.1.2.1.49.2.1.1": [
"TCP-MIB"
],
"1.3.6.1.2.1.50.2.1.1": [
"UDP-MIB"
]
},
"identity": {
"1.3.6.1.2.1.48": [
"IP-MIB"
],
"1.3.6.1.2.1.49": [
"TCP-MIB"
],
"1.3.6.1.2.1.50": [
"UDP-MIB"
]
},
"oids": {
"1.3.6.1.2.1.4": [
"IP-MIB"
],
"1.3.6.1.2.1.5": [
"IP-MIB"
],
"1.3.6.1.2.1.6": [
"TCP-MIB"
],
"1.3.6.1.2.1.7": [
"UDP-MIB"
],
"1.3.6.1.2.1.49": [
"TCP-MIB"
],
"1.3.6.1.2.1.50": [
"UDP-MIB"
]
}
}
在这个示例中,compliance和identity键指向MODULE-COMPLIANCE和MODULE-IDENTITY MIB对象,oids列表定义在MIB模块中的顶级OID分支。数千个MIB的完整索引可以在这里查看。
PySMI库可以自动从HTTP站点或本地目录获取所需的MIB。您可以为此目的配置任何可用的MIB源(包括https://mibs.pysnmp.com/asn1/)。
如何获取PySMI
pysmi软件包根据2-clause BSD许可协议进行分发。源代码作为GitHubrepo免费提供。
您可以使用pip install pysmi-lextudio
或从PyPI下载。
如果某些操作不符合预期,请在GitHub上打开问题或在Stack Overflow上提问。
版权所有(c)2015-2020,Ilya Etingof。版权所有(c)2022-2024,LeXtudio Inc.。保留所有权利。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
pysmi_lextudio-1.4.3.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7d255fb38669410835acf6c2e8ab41975a6d8e64593b119552e36ecba004054f |
|
MD5 | 64c721cfe25497a60b252c2f554700c0 |
|
BLAKE2b-256 | c80cbec628167236bfea4bdf780f573f9c16f8977d1fe1e9123100abb1e7b683 |
pysmi_lextudio-1.4.3-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cb629c6386a30c976f83c29fc71e53b06d60f15094d0c0114cf8d095351b76e5 |
|
MD5 | 4f2160670e62fc5a1dc2d5c5eed2bbb5 |
|
BLAKE2b-256 | 0ef48a64590456991348c99b526aec421ced5d0b4e7c1f05baf02a8338be4464 |