0

再会,

我正在尝试使用 pysnmp 中的mib2dev.py工具为 snmpsim 生成模拟器。我不断得到一个ValueError: Empty module name,不知道为什么。我确保我拥有最新的 pysnmp、pycrypt 和 snmpsim。我在mac上运行。

所需的软件包是使用 easy_install 安装的。我正在使用 brew 的 python 2.7.8。我已经删除了所有软件包和 python,然后重新安装了它们。那没有帮助。

我确实查看了这个堆栈溢出问题,但他们得到了一个不同的错误。

此 MIB 取自此处。我无法显示我的实际 mib,但它会产生与这个小 mib 相同的错误。

我对代理进行编码没有问题。目前我只能找到纯标量或纯表代理的示例。如果您知道一些很好的资源以及使用 pysnmp 构建代理的示例,那就太棒了。

MIB:

MY-MIB DEFINITIONS ::= BEGIN

IMPORTS
        OBJECT-TYPE, Integer32, NOTIFICATION-TYPE, enterprises
                     FROM SNMPv2-SMI
;

myCompany       OBJECT IDENTIFIER ::= {enterprises 42}

testCount OBJECT-TYPE
    SYNTAX Integer32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION "A sample count of something."
    ::= {myCompany 1}

testDescription OBJECT-TYPE
    SYNTAX OCTET STRING
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION "A description of something"
    ::= {myCompany 2}

testTrap NOTIFICATION-TYPE
    STATUS current
    DESCRIPTION "Test notification"
    ::= {myCompany 3}

END

来自 build-pysnmp-mib 的 .py 脚本:

$ mib2dev.py --pysnmp-mib-dir="." --mib-module=MY-MIB.py 
Traceback (most recent call last):
  File "/usr/local/bin/mib2dev.py", line 4, in <module>
    __import__('pkg_resources').run_script('snmpsim==0.2.4', 'mib2dev.py')
  File "build/bdist.macosx-10.10-x86_64/egg/pkg_resources/__init__.py", line 696, in run_script

  File "build/bdist.macosx-10.10-x86_64/egg/pkg_resources/__init__.py", line 1614, in run_script

  File "/usr/local/lib/python2.7/site-packages/snmpsim-0.2.4-py2.7.egg/EGG-INFO/scripts/mib2dev.py", line 240, in <module>
    [ builder.ZipMibSource(m).init() for m in mibDirs ]
  File "/Library/Python/2.7/site-packages/pysnmp-4.2.5-py2.7.egg/pysnmp/smi/builder.py", line 45, in init

  File "/Library/Python/2.7/site-packages/pysnmp-4.2.5-py2.7.egg/pysnmp/smi/builder.py", line 103, in _init

ValueError: Empty module name
4

1 回答 1

0

更新:正如 smilint 和 pysnmp 建议的那样,您需要将 MODILE-IDENTITY 子句添加到原始 MIB 文件中,如下所示:

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, Integer32, NOTIFICATION-TYPE, enterprises
                 FROM SNMPv2-SMI
;

my-MIB MODULE-IDENTITY
   LAST-UPDATED "201501120000Z"
   ORGANIZATION  "X"
   CONTACT-INFO  "X"
   DESCRIPTION   "X"
   REVISION      "201501120000Z"
   DESCRIPTION   "X"
   ::= { enterprises 42 }

myCompany       OBJECT IDENTIFIER ::= { my-MIB 123 }
...

通常,为了解决此类问题,我会运行 smilint 以查看原始 MIB 是否良好以及 libsmi 设置是否正常工作。接下来尝试运行:

smidump -f python MY-MIB.txt

查看 smidump 调用的结果是什么,该调用被馈送到 libsmi2pysnmp(也由 build-pysnmp-mib 调用)。

当一切正常时,build-pysnmp-mib 调用 smidump 生成 Python 代码并将其传递给 libsmi2pysnmp 脚本。后者生成符合 pysnmp 的代码(例如 MY-MIB.py)。

在我看来,smidump 步骤是最脆弱的:它很容易在 IMPORT 语句中提到的不可用 MIB 或 MIB 中的语法错误/不兼容性上失败。

于 2015-01-13T08:07:03.670 回答