如何在Python 3.6中编译企业MIB并添加自定义MIB?
别担心,作为新手遇到这个问题很正常,我来一步步帮你解决。首先我们先分析你运行mibdump.py后的输出问题,再逐步推进解决方案:
问题分析
从你给出的命令输出里能看到关键提示:
Missing source MIBs: Cisco-Syslog-mib
这说明mibdump.py找不到你指定的Cisco-Syslog-mib.mib文件,而且默认的编译后文件存放目录也不是你pysnmp-mibs的安装目录(输出里的目标目录是C:\Users\mljolje\PySNMP Configuration\mibs,而你的pysnmp_mibs实际在C:\Users\mljolje\AppData\Local\Programs\Python\Python36\Lib\site-packages\pysnmp_mibs)。
解决步骤
1. 确保MIB文件能被脚本找到
你需要让mibdump.py准确定位到你的MIB文件:
- 如果MIB文件就在你执行命令的目录(
C:\Users\mljolje\AppData\Local\Programs\Python\Python36\Tools\scripts),要注意文件名的大小写匹配(比如部分Cisco MIB是全大写的CISCO-SYSLOG-MIB.mib)。 - 如果MIB在其他目录,直接指定完整路径即可,比如:
python mibdump.py C:\Users\mljolje\Desktop\Cisco-Syslog-mib.mib
2. 指定编译后文件的目标目录(关键)
要让pysnmp能识别到新编译的MIB,必须把生成的.py文件放到pysnmp_mibs的安装目录里。用--destination-dir参数指定这个路径:
python mibdump.py --destination-dir "C:\Users\mljolje\AppData\Local\Programs\Python\Python36\Lib\site-packages\pysnmp_mibs" Cisco-Syslog-mib.mib
3. 手动指定MIB源目录(推荐)
如果你的MIB都集中存放在某个自定义目录(比如C:\MyMIBs),可以用--mib-source参数告诉脚本去哪里找源MIB:
python mibdump.py --mib-source "C:\MyMIBs" --destination-dir "C:\Users\mljolje\AppData\Local\Programs\Python\Python36\Lib\site-packages\pysnmp_mibs" Cisco-Syslog-mib.mib
4. 处理依赖MIB
很多企业MIB依赖标准SNMP MIB(比如SNMPv2-SMI、SNMPv2-TC等),mibdump.py默认会自动从远程仓库下载依赖,但如果下载失败:
- 手动下载对应的依赖MIB文件,放到你的MIB源目录里。
- 重新运行
mibdump.py,它会自动编译这些依赖MIB。
5. 验证编译结果
编译成功后,去pysnmp_mibs目录查看,会生成类似Cisco_Syslog_mib.py的文件(MIB名称里的连字符会被自动替换成下划线)。
在你的陷阱发送脚本里,就可以这样导入并使用:
from pysnmp_mibs import Cisco_Syslog_mib # 示例:获取自定义陷阱的OID custom_trap_oid = Cisco_Syslog_mib.yourCustomTrap.getValue()
额外调试技巧
如果还是遇到问题,可以添加--debug参数运行mibdump.py,查看详细的错误日志,帮助定位问题:
python mibdump.py --debug --mib-source "C:\MyMIBs" --destination-dir "C:\Users\mljolje\AppData\Local\Programs\Python\Python36\Lib\site-packages\pysnmp_mibs" Cisco-Syslog-mib.mib
内容的提问来源于stack exchange,提问作者Marijana Ljolje

