跳转到主要内容

纯Python实现的SNMP/SMI MIB解析和转换库。

项目描述

SNMP MIB 编译器

Become a Sponsor PyPI PyPI Downloads Python Versions GitHub license

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.jsonTCP-MIB.jsonUDP-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"
          ]
      }
   }

在这个例子中,complianceidentity键指向MODULE-COMPLIANCEMODULE-IDENTITY MIB对象,oids列表定义在MIB模块中的顶级OID分支。数千个MIB的完整索引可以在这里查看。

PySMI库可以自动从HTTP站点或本地目录获取所需的MIB。你可以配置任何可用的MIB源(包括https://mibs.pysnmp.com/asn1/)来完成此目的。

如何获取PySMI

PySMI软件包在2-clause BSD许可协议的条款和条件下分发。源代码作为GitHub 仓库免费提供。

你可以使用pip install pysmi或从PyPI下载它。

如果某些事情没有按预期工作,请在GitHub上打开一个问题或在Stack Overflow上提问

版权所有(c)2015-2020,Ilya Etingof。版权所有(c)2022-2024,LeXtudio Inc.。保留所有权利。

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

pysmi-1.5.0.tar.gz (124.1 kB 查看哈希值)

上传时间: 源代码

构建分发

pysmi-1.5.0-py3-none-any.whl (84.4 kB 查看哈希值)

上传时间 Python 3

由以下支持