【问题标题】:SNMP sysObjectID not translated when using Python3 easysnmp module使用 Python3 easysnmp 模块时未翻译 SNMP sysObjectID
【发布时间】:2018-10-31 13:14:02
【问题描述】:

当我使用 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 命令时看到的相同的值,但这也无济于事。

这可能是什么原因?

【问题讨论】:

    标签: python-3.x snmp easysnmp


    【解决方案1】:

    这是因为 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。

    【讨论】:

      猜你喜欢
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多