PySNMP编译LLDP-MIB报错:MibNotFoundError问题求助
问题:pysnmp解析LLDP-MIB时依赖缺失报错
我使用pysnmp从lldpRemTable获取数据,已成功拿到目标数值,但需要借助MIB解析各数值的具体含义(比如确认Ethernet1/1对应的lldpRemPortId)。最初遇到pysnmp.smi.error.MibNotFoundError(找不到LLDP-MIB),将文件路径改为绝对路径后,又出现找不到SNMPv2-TC的错误。
奇怪的是,用类似代码操作cdpCacheTable时完全正常,甚至无需修改路径。我原本以为CISCO-CDP-MIB是随pysnmp预编译好的,但发现如果不手动编译(注释代码第1、3行),对象标签会显示异常。
可正常运行的cdpCacheTable代码
mib_file = os.path.dirname(os.path.abspath(__file__)) + '/mibs' mib_builder = builder.MibBuilder() compiler.addMibCompiler(mib_builder, sources=[mib_file]) mib_builder.loadModules('CISCO-CDP-MIB') mib_view = view.MibViewController(mib_builder)
存在问题的lldpRemTable代码
mib_file = os.path.dirname(os.path.abspath(__file__)) + '/mibs' mib_builder = builder.MibBuilder() compiler.addMibCompiler(mib_builder, sources=[mib_file]) mib_builder.loadModules('LLDP-MIB') mib_view = view.MibViewController(mib_builder)
注:CISCO-CDP-MIB和LLDP-MIB文件均存储在上述代码指定的./mibs目录中。
尝试过的解决方法
- 补充默认MIB路径:查到指定
sources后,pysnmp不会再读取默认路径,于是修改代码将默认MIB目录加入sources列表:
mib_file = os.path.dirname(os.path.abspath(__file__)) + '/mibs' mib_builder = builder.MibBuilder() compiler.addMibCompiler(mib_builder, sources=[mib_file, os.path.expanduser('~') + '/.local/lib/python3.8/site-packages/pysnmp/smi/mibs'], destination=os.path.expanduser('~') + '/.local/lib/python3.8/site-packages/pysnmp/smi/mibs') mib_builder.loadModules('LLDP-MIB') mib_view = view.MibViewController(mib_builder)
但仍出现MibNotFoundError。
启用调试:通过
debug.setLogger(debug.Debug('all'))调试后,发现程序仍无法找到所需的依赖MIB。手动下载依赖:尝试下载所需的依赖MIB文件到
/mibs目录,但问题依旧,推测是依赖链过长,需要大量MIB文件才能解决。
疑问
开发者提到“编译MIB需要具备所有它导入的MIB(以及这些MIB导入的其他MIB,依此类推),即必须拥有依赖链中所有未编译的MIB”。难道必须把所有依赖MIB都放到/mibs目录中吗?这显然不是理想方案,希望找到像操作cdpCacheTable那样简便的解决方案。
内容的提问来源于stack exchange,提问作者dryhen
相关产品推荐
相关产品推荐

