PySNMP - 编译的MIB
-
我配置编译器在哪里寻找ASN1的MIB如下的默认位置:PySNMP - 编译的MIB
compiler.addMibCompiler(mibBuilder, sources=['/usr/share/snmp/mibs'])
- )
然后使用getCmd(如:
errorIndication, errorStatus, errorIndex, varBinds = next( getCmd(SnmpEngine(), CommunityData('private', mpModel=0), UdpTransportTarget(('192.168.56.20', '161')), ContextData(), ObjectType(ObjectIdentity('VLAN-MIB','InterfaceMode',3))))
我在
$HOME/.pysnmp/mibs
找到了VLAN-MIB.py,一切正常。
但我想修改asn1 MIB位置到我的本地文件夹。你说:
/home/krish/mibs
我尝试了两种不同的方式:
-
此:
compiler.addMibCompiler(mibBuilder, sources=['/home/krish/mibs'])`
-
此:
errorIndication, errorStatus, errorIndex, varBinds = next( getCmd(SnmpEngine(), CommunityData('private', mpModel=0), UdpTransportTarget(('192.168.56.20', '161')), ContextData(), ObjectType(ObjectIdentity('VLAN-MIB','InterfaceMode',3).addAsn1MibSource('/home/krish/mibs'))) )
无论哪种方式,我收到错误,说无法找到VLAN-MIB。
但如果我下线编译它自己并把VLAN-MIB.py文件中指定的目录为:
errorIndication, errorStatus, errorIndex, varBinds = next(
getCmd(SnmpEngine(),
CommunityData('private', mpModel=0),
UdpTransportTarget(('192.168.56.20', '161')),
ContextData(),
ObjectType(ObjectIdentity('VLAN-MIB','InterfaceMode',3).addMibSource('/home/krish/mibs')))
)
它工作得很好。
所以我的问题是编译后的MIB(.py)放在PySMI自动解析asn1 MIB之后?在上述情况下,我没有在默认位置$HOME/.pysnmp/mibs
找到它们。
以及如何告诉pysnmp/pysmi在哪里保留自动生成的.py文件。
我不想在每个get/set调用中使用addMibSource()
。 addMibCompiler()
只适用于/ usr/share/snmp/mibs,不适用于用户目录。
想知道我在这里失踪。感谢帮助。
我的猜测是:
- 这是ASN.1 MIB找不到,而不是它的编译对口
VLAN-MIB.py
- 这并不是说ASN.1
VLAN-MIB
不能被发现,但其他一些ASN.1 MIBVLAN-MIB
是依赖于
究竟是什么pysnmp错误说?
由于您使用ASN.1 MIBs,例如,不是pysmi预编译的,你应该使用.addMibCompiler
或.addAsn1MibSource
来设置搜索路径。
尽管它的名字,.addMibCompiler
/.addAsn1MibSource
不添加一个路径,但设置一个新的(S)为给定的MibBuilder
实例。因此,您应该始终指定您的应用程序可能需要的所有MIB源,以及您引用的MIB导入的MIB(并递归执行)。
您可以将destination
关键字参数传递给.addMibCompiler
/.addAsn1MibSource
函数以更改编译的MIB位置。
说了,我会建议尝试:
addMibCompiler(mibBuilder, sources=['/home/krish/mibs', '/usr/share/snmp/mibs'])
或
ObjectType(ObjectIdentity('VLAN-MIB','InterfaceMode',3).addAsn1MibSource('/home/krish/mibs', '/usr/share/snmp/mibs')))
另外,如果你想坚持只是/home/krish/mibs
,尝试复制所有必需的MIB到该目录中。从pysnmp报告缺少依赖关系导入错误。
最后,有一个大集上线不同的MIB您可以配置pysnmp自动下载和使用:
addMibCompiler(mibBuilder, sources=['http://mibs.snmplabs.com/asn1/@[email protected]'], destination='/home/krish/mibs')
你猜对了“一些其他的VLAN-MIB依赖的ASN.1 MIB”。非常感谢。欣赏它。 – krish
请注明您使用的是pysnmp版本? –
pysnmp 4.3.2版本 – krish