我正在尝试在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
Run Code Online (Sandbox Code Playgroud)
我知道放入此数据的数据是准确的,因为当我使用asynCommandGenerator.asyncNextCmd相同的数据时udpTransportTarget,CommunityData它的工作没有问题.此外,我看到的错误非常特定于MibBuilder组件.
我看到的错误是:
Traceback(最近一次调用最后一次):
文件"./snmpcollectortest.py",第11行,in
'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. 不过我已经纠正了这一点,我仍然得到同样的错误.
该getMibPath()/ setMibPath()方法已经过时.除非你.egg pysnmp或其MIB模块,否则它们不起作用.
您应该始终使用getMibSources()/ setMibSources()方法.这些适用于.egg和基于文件的设置.
mibPath = mibBuilder.getMibSources() + (builder.DirMibSource('/path/to/command/mibs'),)
mibBuilder.setMibSources(*mibPath)
mibBuilder.loadModules(
'MIB-File',
)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,pysnmp不需要M2Crypto,所需要的是pyasn1和pycrypto(仅适用于SNMPv3加密).