我正在尝试在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
和udpTransportTarget
使用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.但是我已经纠正了这个问题,但我仍然遇到同样的错误。
答案 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加密)。