如何加载自定义 MIB

How to load a custom MIB

我一直在尝试使用 PySNMP 库创建一个陷阱侦听器,它应该加载一个自定义 MIB 文件(已经为 PySNMP 编译以与 mibdump.py 一起使用),并以可读格式打印接收到的陷阱字段名称 = 值。

但是,代码无法找到 MIB 文件并且 returns 出现错误:

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):

它returns那个错误。

我已尝试按照说明列出所有路径 here 并将 MIB 复制到所有文件夹,但没有成功。

我也读过 post 但我不明白如何在 /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]***"

有什么我遗漏的吗?

谢谢。

您不需要显式编译 MIB - 这会在幕后发生。

如果您正在构建陷阱侦听器(通知接收器),您将掌握它接收到的变量绑定。我猜此时你应该越过它们并像 this:

这样解决 MIB
varBinds = [ObjectType(ObjectIdentity(*varBind).resolveWithMib(mibViewController)
            for varBind in varBinds]

在解析 varBind 之前,您可能需要 pre-load the MIBs you intend to receive the OIDs for. Prior to that you are likely to want to point pysnmp 到一个包含所有这些 MIB 及其依赖项的位置。