编译自定义MIB用于pysnmp程序遇问题:本地MIB被忽略求助
解决mibdump.py忽略本地自定义MIB、远程下载错误文件的问题
看起来你遇到的核心问题是mibdump.py优先从远程仓库获取了同名的"NAS" MIB(但实际是错误的HTML文件),完全跳过了你的本地自定义MIB。这是因为工具默认行为是:当找不到本地匹配的MIB时,会尝试从远程仓库借用,但如果远程有同名条目(哪怕是无效的),就会直接下载使用。
你的原命令存在两个关键问题
- 最后一个参数传入的是本地目录/文件路径,但
mibdump.py期望的是MIB模块名(也就是你自定义MIB里XXX DEFINITIONS ::= BEGIN中的XXX,比如你的MIB写的是NAS DEFINITIONS ::= BEGIN,模块名就是NAS)。 - 没有明确指定本地MIB的搜索路径,也没有禁用远程借用行为,导致工具直接去远程拉取了错误文件。
正确的编译步骤和命令
1. 先确认本地MIB的基础正确性
- 确保自定义MIB的文件名和模块名一致:比如模块名是
NAS,文件名应为NAS.mib或NAS.txt,放在C:/Users/me/Desktop目录下。 - 用
smidump工具检查MIB语法(避免因语法错误导致工具跳过本地MIB):
如果输出语法错误,先修复MIB的语法问题。smidump -k C:/Users/me/Desktop/NAS.mib
2. 强制使用本地MIB的编译命令
使用--mib-source指定本地MIB所在目录,同时用--no-borrow禁用远程借用功能,确保工具只使用你本地的MIB:
mibdump.py --mib-source=C:/Users/me/Desktop --no-borrow --destination-directory=C:/Users/me/Desktop --destination-format=pysnmp NAS
--mib-source:告诉工具优先从这个目录搜索MIB文件--no-borrow:禁止工具从远程仓库获取缺失的MIB- 最后一个参数
NAS是你的MIB模块名,必须和MIB定义中的名称完全一致
3. 排查问题的额外手段
如果还是不行,加上--debug参数查看详细日志,能清晰看到工具如何搜索和处理MIB:
mibdump.py --debug --mib-source=C:/Users/me/Desktop --no-borrow --destination-directory=C:/Users/me/Desktop --destination-format=pysnmp NAS
通过日志可以确认工具是否找到了你的本地MIB文件,以及是否有其他错误导致编译失败。
验证编译结果
编译成功后,生成的NAS.py应该是包含pysnmp MIB定义的Python文件,而非HTML代码。之后你就可以在pysnmp函数中正常使用这个MIB了,只需确保addAsn1MibSource指向你编译后的MIB目录即可。
内容的提问来源于stack exchange,提问作者Therealdanjo
相关产品推荐
相关产品推荐

