2

我正在尝试在 PySNMP 中使用 MIB 文件。代码相当简单。没什么复杂的。只是试图获取 OID 下的信息。我正在使用的代码如下:

#!/usr/local/bin/python2.7

from pysnmp.smi import builder, view, error
from pysnmp.entity.rfc3413.oneliner import cmdgen

cmdGen = cmdgen.CommandGenerator()
mibBuilder = builder.MibBuilder()
mibPath = mibBuilder.getMibPath() + ( '/path/to/command/mibs', )
mibBuilder.setMibPath( *mibPath )
mibBuilder.loadModules( 
    'MIB-File',
    )
mibView = view.MibViewController( mibBuilder )
errorIndication, errorStatus, errorIndex, \
                 varBindTable = cmdGen.nextCmd( 
    cmdgen.CommunityData( 'Name', 'Community' ),
    cmdgen.UdpTransportTarget( ( 'IP Address', 161 ) ),
    ( ( '', 'serverName' ), ),
    )

print varBindTable

我知道放入其中的数据是准确的,就像我使用它时asynCommandGenerator.asyncNextCmd一样udpTransportTargetCommunityData它可以正常工作。另外,我看到的错误非常特定于 MibBuilder 组件。

我看到的错误是:

回溯(最近一次通话最后):

文件“./snmpcollectortest.py”,第 11 行,在

'NS-MIB-smiv2',

loadModules 中的文件“/usr/lib/python2.7/site-packages/pysnmp-4.2.1-py2.7.egg/pysnmp/smi/builder.py”,第 221 行

pysnmp.smi.error.SmiError:MIB 模块“/path/to/command/mibs/MIB-File.py”加载错误:在搜索路径中找不到 MIB 文件“ASN1.py[co]”

更新:

我发现我没有安装 M2Crypto,这就是我找不到 ASN1.py 的原因。但是我已经纠正了这个问题,但我仍然遇到同样的错误。

4

1 回答 1

7

/方法已过时getMibPath()setMibPath()除非您使用 .egg pysnmp 或其 MIB 模块,否则它们不起作用。

您应该始终使用getMibSources()/setMibSources()方法。这些适用于 .egg 和基于文件的设置。

mibPath = mibBuilder.getMibSources() + (builder.DirMibSource('/path/to/command/mibs'),)
mibBuilder.setMibSources(*mibPath)
mibBuilder.loadModules(
    'MIB-File',
)

顺便说一句,pysnmp 不需要 M2Crypto,需要的是 pyasn1 和 pycrypto(仅用于 SNMPv3 加密)。

于 2012-01-28T09:53:57.607 回答