簡體   English   中英

使用Python3 easysnmp模塊時,未轉換SNMP sysObjectID

[英]SNMP sysObjectID not translated when using Python3 easysnmp module

當我使用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時相同的值snmpget -Dinit_mib -m ALL -v 2c -c public r1 sysObjectID.0命令,但這也無濟於事。

什么可能導致這個?

這是因為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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM