Package: snimpy Version: 0.8.3-1 Severity: normal Hi *.
Using the snimpy.snmp.walk() method to retrieve SNMP data returns more data than expected if the SNMP version is not 1. It seems the walk result includes the OIDs from the tree "above". Consider the following SNMP data for ifDescr: maus@fraggle:~ $ snmpwalk -v2c -c public sw-hp1920-8g-1 .1.3.6.1.2.1.2.2.1.2 iso.3.6.1.2.1.2.2.1.2.1 = STRING: "GigabitEthernet1/0/1" iso.3.6.1.2.1.2.2.1.2.2 = STRING: "GigabitEthernet1/0/2" iso.3.6.1.2.1.2.2.1.2.3 = STRING: "GigabitEthernet1/0/3" iso.3.6.1.2.1.2.2.1.2.4 = STRING: "GigabitEthernet1/0/4" iso.3.6.1.2.1.2.2.1.2.5 = STRING: "GigabitEthernet1/0/5" iso.3.6.1.2.1.2.2.1.2.6 = STRING: "GigabitEthernet1/0/6" iso.3.6.1.2.1.2.2.1.2.7 = STRING: "GigabitEthernet1/0/7" iso.3.6.1.2.1.2.2.1.2.8 = STRING: "GigabitEthernet1/0/8" iso.3.6.1.2.1.2.2.1.2.9 = STRING: "GigabitEthernet1/0/9" iso.3.6.1.2.1.2.2.1.2.10 = STRING: "GigabitEthernet1/0/10" iso.3.6.1.2.1.2.2.1.2.11 = STRING: "NULL0" iso.3.6.1.2.1.2.2.1.2.12 = STRING: "Vlan-interface1" iso.3.6.1.2.1.2.2.1.2.13 = STRING: "Vlan-interface101" iso.3.6.1.2.1.2.2.1.2.14 = STRING: "Bridge-Aggregation1" The expected and correct result will be returned if SNMP version 1 is used: maus@fraggle:~ $ cat snimpy_walk_1.py #!/usr/bin/env python import snimpy import snimpy.snmp session = snimpy.snmp.Session("sw-hp1920-8g-1", community="public", version=1) result = session.walk(".1.3.6.1.2.1.2.2.1.2") for r in result: print("OID: %s" % (r[0], )) results in: maus@fraggle:~ $ ./snimpy_walk_1.py OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 1) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 2) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 3) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 4) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 5) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 6) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 7) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 8) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 9) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 10) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 11) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 12) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 13) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 14) Using this snippet to retrieve the data with SNMP v2c: maus@fraggle:~ $ cat snimpy_walk_2c.py #!/usr/bin/env python import snimpy import snimpy.snmp session = snimpy.snmp.Session("sw-hp1920-8g-1", community="public", version=2) result = session.walk(".1.3.6.1.2.1.2.2.1.2") for r in result: print("OID: %s" % (r[0], )) results in: maus@fraggle:~ $ ./snimpy_walk_2c.py OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 1) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 2) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 3) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 4) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 5) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 6) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 7) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 8) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 9) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 10) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 11) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 12) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 13) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 14) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 1) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 2) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 3) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 4) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 5) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 6) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 7) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 8) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 9) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 10) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 11) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 12) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 13) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 14) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 1) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 2) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 3) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 4) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 5) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 6) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 7) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 8) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 9) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 10) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 11) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 12) Same for SNMPv3: maus@fraggle:~ $ cat snimpy_walk_3.py #!/usr/bin/env python import snimpy import snimpy.snmp session = snimpy.snmp.Session("sw-hp1920-8g-1", version=3, secname="snmpv3user", authprotocol="SHA", authpassword="auth_password", privprotocol="AES128", privpassword="priv_password") result = session.walk(".1.3.6.1.2.1.2.2.1.2") for r in result: print("OID: %s" % (r[0], )) which returns: maus@fraggle:~ $ ./snimpy_walk_3.py OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 1) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 2) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 3) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 4) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 5) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 6) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 7) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 8) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 9) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 10) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 11) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 12) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 13) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 2, 14) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 1) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 2) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 3) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 4) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 5) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 6) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 7) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 8) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 9) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 10) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 11) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 12) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 13) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 3, 14) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 1) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 2) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 3) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 4) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 5) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 6) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 7) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 8) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 9) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 10) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 11) OID: (1, 3, 6, 1, 2, 1, 2, 2, 1, 4, 12) Although the results from .1.3.6.1.2.1.2.2.1.2 are correct, it also contain all data from the upper tree (.1.3.6.1.2.1.2.2.1) BTW, all snimpy versions up to 0.8.6 show this behavior (didn't build packages for 0.8.7 and 0.8.8 yet because of the requirement for cffi >= 1.0.0). Sincerely yours, Andreas Maus. -- System Information: Debian Release: 8.2 APT prefers stable APT policy: (500, 'stable') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 3.16.0-4-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) Versions of packages snimpy depends on: ii libc6 2.19-18+deb8u1 ii libsmi2ldbl 0.4.8+dfsg2-10+b2 ii python 2.7.9-1 ii python-cffi 0.8.6-1 ii python-pysnmp4 4.2.5-1 pn python2.7:any <none> snimpy recommends no packages. Versions of packages snimpy suggests: pn ipython <none> -- no debconf information -- "Things that try to look like things often do look more like things than things. Well-known fact." Granny Weatherwax - "Wyrd sisters"
signature.asc
Description: Digital signature