使用Python3的easysnmp模块时,SNMP sysObjectID未被翻译。

3

当我使用easysnmp模块查询SNMP sysObjectID时,返回的值是数字表示法:

$ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04) 
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from easysnmp import Session
>>> session = Session(hostname="r1", community='public', version=2)
>>> session.get('sysObjectID.0')
<SNMPVariable value='.1.3.6.1.4.1.2636.1.1.1.2.21' (oid='sysObjectID', oid_index='0', snmp_type='OBJECTID')>
>>> 

然而,这似乎不是因为easysnmp无法找到正确的MIB文件。 当我将上述命令放入文件中并使用strace执行时,正确的MIB被访问:

$ strace 2>&1 -f -e open python3 snmp_test.py | grep mib-jnx-chas-defines.txt
open("/usr/share/snmp/mibs/JuniperMibs_from_Juniper/mib-jnx-chas-defines.txt", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 ENOTDIR (Not a directory)
open("/usr/share/snmp/mibs/JuniperMibs_from_Juniper/mib-jnx-chas-defines.txt", O_RDONLY) = 4
open("/usr/share/snmp/mibs/JuniperMibs_from_Juniper/mib-jnx-chas-defines.txt", O_RDONLY) = 3
$ 

我可以使用 snmpget 进行双重检查:

$ snmpget -v 2c -c public r1 sysObjectID.0 
SNMPv2-MIB::sysObjectID.0 = OID: JUNIPER-CHASSIS-DEFINES-MIB::jnxProductNameMX960
$ strace 2>&1 -f -e open snmpget -v 2c -c public r1 sysObjectID.0 | grep mib-jnx-chas-defines.txt
open("/usr/share/snmp/mibs/JuniperMibs_from_Juniper/mib-jnx-chas-defines.txt", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 ENOTDIR (Not a directory)
open("/usr/share/snmp/mibs/JuniperMibs_from_Juniper/mib-jnx-chas-defines.txt", O_RDONLY) = 4
open("/usr/share/snmp/mibs/JuniperMibs_from_Juniper/mib-jnx-chas-defines.txt", O_RDONLY) = 3
$ 

然而,为了确认一下,我将os.environ['MIBDIRS']os.environ['MIBS']os.environ['PREFIX']设置为与执行snmpget -Dinit_mib -m ALL -v 2c -c public r1 sysObjectID.0命令时看到的值相同,但这也没有帮助。

是什么原因导致这种情况?

1个回答

3
这是因为OID sysObjectID.0的值仅被视为一个值。似乎use_sprint_value选项会在返回值上启用额外的格式化。
>>> session = Session(hostname="abc", community='public', version=2, use_long_names=True, use_sprint_value=True)
>>> session.get('sysObjectID.0')
<SNMPVariable value='.iso.org.dod.internet.private.enterprises.2435.2.3.9.1' (oid='.iso.org.dod.internet.mgmt.mib-2.system.sysObjectID', oid_index='0', snmp_type='OBJECTID')>

显然,use_long_names选项也有助于显示扩展名称,但我没有所有需要解码此示例的MIB。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接