如何加载自定义MIB

时间:2019-09-12 14:30:32

标签: python pysnmp mib snmp-trap

我一直在尝试使用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]***"

有什么我想念的吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

您不需要显式地编译MIB,这会在后台发生。

如果要构建陷阱侦听器(通知接收器),则将保留其接收到的变量绑定。我猜测此时您应该越过它们并像this一样反对MIB:

varBinds = [ObjectType(ObjectIdentity(*varBind).resolveWithMib(mibViewController)
            for varBind in varBinds]

在解决varBinds之前,您可能需要pre-load the MIBs打算接收其OID。在此之前,您可能想point pysnmp到一个存放所有这些MIB及其依赖项的位置。