如何加载自定义 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 及其依赖项的位置。
我一直在尝试使用 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 复制到所有文件夹,但没有成功。
我也读过
最后,我不明白为什么要搜索.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:
这样解决 MIBvarBinds = [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 及其依赖项的位置。