使用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.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的原因。不过我已经解决了这个问题,但仍然遇到同样的错误。
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的加密)。