我一直在尝试使用PySNMP库创建陷阱侦听器,该陷阱侦听器应加载自定义MIB文件(已为PySNMP编译以与mibdump.py一起使用),并以字段名=的可读格式打印收到的陷阱。值。
但是,代码无法找到MIB文件并返回错误:
pysnmp.smi.error.MibNotFoundError: MIB file "BMC-CONTROLMEM-MIB.py[co]" not found in search path (DirMibSource('/home/ign
asi/Workspace/trap-endpoint/.venv/lib/python3.7/site-packages/pysnmp/smi/mibs'),
DirMibSource('/home/ignasi/Workspace/trap-endpoint/.venv/lib/python3.7/site-packages/pysnmp/smi/mibs/instances'),
DirMibSource('/home/ignasi/Workspace/trap-endpo
int/.venv/lib/python3.7/site-packages/pysnmp_mibs'),
DirMibSource('/home/ignasi/.pysnmp/mibs'),
DirMibSource('python_packaged_mibs'),
DirMibSource('/home/ignasi/.pysnmp/mibs'))
我从以下示例(this)开始,但是当我指向我的MIB时:
for (errorIndication,
errorStatus,
errorIndex,
varBinds) in bulkCmd(SnmpEngine(),
UsmUserData('usr-none-none'),
UdpTransportTarget(('localhost', 5000)),
ContextData(),
0, 50,
ObjectType(
ObjectIdentity('BMC-CONTROLMEM-MIB', 'controlmAlert').addMibSource('/home/ignasi/.pysnmp/mibs').addMibSource('python_packaged_mibs')
),
lexicographicMode=False):
它返回该错误。
我已尝试按照here列出所有路径,并将MIB复制到所有文件夹都没有成功。
我也阅读了this帖子,但我不明白如何在/ instances文件夹中以“ __”为前缀生成MIB。
最后,我不明白为什么要搜索.py [co]文件,是否还必须对其进行编译?
...modName and modName + "***.py[co]***", ', '.join([str(x) for x in self.__mibSources]))
pysnmp.smi.error.MibNotFoundError: MIB file "BMC-CONTROLMEM-MIB.***py[co]***"
有什么我想念的吗?
谢谢。
答案 0 :(得分:1)
您不需要显式地编译MIB,这会在后台发生。
如果要构建陷阱侦听器(通知接收器),则将保留其接收到的变量绑定。我猜测此时您应该越过它们并像this一样反对MIB:
varBinds = [ObjectType(ObjectIdentity(*varBind).resolveWithMib(mibViewController)
for varBind in varBinds]
在解决varBinds之前,您可能需要pre-load the MIBs打算接收其OID。在此之前,您可能想point pysnmp到一个存放所有这些MIB及其依赖项的位置。