美好的一天,
我正在尝试使用pysnmp中的mib2dev.py
工具为snmpsim生成模拟器。我一直在ValueError: Empty module name
,我不知道为什么。我确保我有最新的pysnmp,pycrypt和snmpsim。我在mac上运行。
使用easy_install安装所需的软件包。我正在使用brew的python 2.7.8。我删除了所有包和python然后重新安装它们。那没用。
我确实对此stack overflow question进行了审核,但他们遇到了不同的错误。
此MIB取自here。我无法显示我的实际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
答案 0 :(得分: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中的语法错误/不兼容性上失败。