SNMP sysObjectID не транслируется при использовании модуля Python3 easysnmp
Когда я запрашиваю SNMP sysObjectID
с помощью easysnmp
модуль, то возвращаемое значение находится в числовой записи:
$ 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 ответ
Это потому, что значение в 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, необходимых для декодирования этого примера.