PySNMP使用MIB文件时出错

时间:2012-01-26 15:42:37

标签: python mib pysnmp

我正在尝试在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.asyncNextCmdudpTransportTarget使用CommunityData时,它可以正常工作。此外,我看到的错误非常特定于MibBuilder组件。

我看到的错误是:

  

追踪(最近一次呼叫最后一次):

     

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

     

'NS-MIB-SMIv2的',

     

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

     

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

更新

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

1 个答案:

答案 0 :(得分: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',
)

BTW,pysnmp不需要M2Crypto,所需要的是pyasn1和pycrypto(仅限SNMPv3加密)。