Re: getting extension output with python bindings

Kenny Rasschaert <[email protected]>
Newsgroups gmane.network.net-snmp.user
Message-ID <[email protected]>
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

After readings some more blogs and documentation I've learned how to
convert an index string to a dotted-decimal, numeric OID. Looking up
this OID works flawlessly.

I took the nsExtendOutput1Line OID and tacked on the length of the
index string, followed by the decoded ASCII values for each letter, as
documented in the FAQ (http://www.net-snmp.org/FAQ.html).

The following two functions are how I implemented it in python.

import netsnmp


def snmp(thing, host):
    """
    Perform an SNMP lookup of an index string on a host, return the
result.
    """
    var = netsnmp.Varbind(string_to_oid(thing))
    result = netsnmp.snmpget(var, Version=2, DestHost=host,
Community="public")
    return result[0]


def string_to_oid(name):
    """
    Convert an net-snmp string index to an OID.
    The OID starts with nsExtendOutput1Line, followed by the length of the
    string index, followed by the ASCII values for the individual
characters.
    Returns a fully qualified, dotted-decimal, numeric OID.
    """
    oid_prefix = "1.3.6.1.4.1.8072.1.3.2.3.1.1"
    ascii_values = [str(ord(element)) for element in list(name)]
    return ".".join(["", oid_prefix, str(len(name))]+ascii_values)


I hope it might prove useful to someone.

Kenny Rasschaert
+32 497 72 27 69 | Open Source consultant - Inuits.eu

On 12/03/2014 06:06 PM, Kenny Rasschaert wrote:
> Hi,
> 
> I'm using net-snmp 5.7.2 and the python bindings on CentOS 6. I've 
> added some extensions to my local net-snmp agent with the extend 
> keyword. They look like this:
> 
> extend galera-seqno /usr/local/sbin/galera-status.sh seqno extend
> galera-status /usr/local/sbin/galera-status.sh short
> 
> With the snmp command line tools, they work as expected: [root@db01
> ~]# snmpwalk -v 2c -c public localhost 
> 'NET-SNMP-EXTEND-MIB::nsExtendObjects' 
> NET-SNMP-EXTEND-MIB::nsExtendNumEntries.0 = INTEGER: 2 
> NET-SNMP-EXTEND-MIB::nsExtendCommand."galera-seqno" = STRING: 
> /usr/local/sbin/galera-status.sh 
> NET-SNMP-EXTEND-MIB::nsExtendCommand."galera-status" = STRING: 
> /usr/local/sbin/galera-status.sh 
> NET-SNMP-EXTEND-MIB::nsExtendArgs."galera-seqno" = STRING: seqno 
> NET-SNMP-EXTEND-MIB::nsExtendArgs."galera-status" = STRING: short 
> NET-SNMP-EXTEND-MIB::nsExtendInput."galera-seqno" = STRING: 
> NET-SNMP-EXTEND-MIB::nsExtendInput."galera-status" = STRING: 
> NET-SNMP-EXTEND-MIB::nsExtendCacheTime."galera-seqno" = INTEGER: 5 
> NET-SNMP-EXTEND-MIB::nsExtendCacheTime."galera-status" = INTEGER:
> 5 NET-SNMP-EXTEND-MIB::nsExtendExecType."galera-seqno" = INTEGER:
> exec(1) NET-SNMP-EXTEND-MIB::nsExtendExecType."galera-status" =
> INTEGER: exec(1) 
> NET-SNMP-EXTEND-MIB::nsExtendRunType."galera-seqno" = INTEGER: 
> run-on-read(1) NET-SNMP-EXTEND-MIB::nsExtendRunType."galera-status"
> = INTEGER: run-on-read(1) 
> NET-SNMP-EXTEND-MIB::nsExtendStorage."galera-seqno" = INTEGER: 
> permanent(4) NET-SNMP-EXTEND-MIB::nsExtendStorage."galera-status" =
> INTEGER: permanent(4) 
> NET-SNMP-EXTEND-MIB::nsExtendStatus."galera-seqno" = INTEGER:
> active(1) NET-SNMP-EXTEND-MIB::nsExtendStatus."galera-status" =
> INTEGER: active(1) 
> NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."galera-seqno" = STRING:
> -1 NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."galera-status" =
> STRING: stopped 
> NET-SNMP-EXTEND-MIB::nsExtendOutputFull."galera-seqno" = STRING:
> -1 NET-SNMP-EXTEND-MIB::nsExtendOutputFull."galera-status" =
> STRING: stopped 
> NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."galera-seqno" = INTEGER:
> 1 NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."galera-status" =
> INTEGER: 1 NET-SNMP-EXTEND-MIB::nsExtendResult."galera-seqno" =
> INTEGER: 0 NET-SNMP-EXTEND-MIB::nsExtendResult."galera-status" =
> INTEGER: 1 NET-SNMP-EXTEND-MIB::nsExtendOutLine."galera-seqno".1 =
> STRING: -1 NET-SNMP-EXTEND-MIB::nsExtendOutLine."galera-status".1 =
> STRING: stopped
> 
> and: [root@db01 ~]# snmpget -v 2c -c public localhost 
> 'NET-SNMP-EXTEND-MIB::nsExtendOutLine."galera-status".1' 
> NET-SNMP-EXTEND-MIB::nsExtendOutLine."galera-status".1 = STRING:
> stopped
> 
> I'm doing some python scripting where I would love to get this
> data over snmp, I was very pleased to discover that net-snmp comes
> with python bindings.
> 
> Walking over 'NET-SNMP-EXTEND-MIB::nsExtendObjects' works:
>>>> import netsnmp session = netsnmp.Session(Version = 2, 
>>>> DestHost="localhost",
> Community="public")
>>>> 
> session.walk(netsnmp.VarList(netsnmp.Varbind("NET-SNMP-EXTEND-MIB::nsExtendObjects")))
>
> 
('2', '/usr/local/sbin/galera-status.sh',
> '/usr/local/sbin/galera-status.sh', 'seqno', 'short', None, None,
> '5', '5', '1', '1', '1', '1', '4', '4', '1', '1', '-1', 'stopped',
> '-1', 'stopped', '1', '1', '0', '1', '-1', 'stopped')
> 
> Getting the output for both my extensions has also worked:
>>>> 
> session.walk(netsnmp.VarList(netsnmp.Varbind("NET-SNMP-EXTEND-MIB::nsExtendOutLine")))
>
> 
('-1', 'stopped')
> 
> I can not, however, seem to get just the output for a specific
> extension:
>>>> 
> session.walk(netsnmp.VarList(netsnmp.Varbind('NET-SNMP-EXTEND-MIB::nsExtendOutLine."galera-short"')))
>
> 
()
>>>> 
> session.walk(netsnmp.VarList(netsnmp.Varbind('NET-SNMP-EXTEND-MIB::nsExtendOutLine."galera-short".1')))
>
> 
()
>>>> 
> session.get(netsnmp.VarList(netsnmp.Varbind('NET-SNMP-EXTEND-MIB::nsExtendOutLine."galera-short".1')))
>
> 
('',)
> 
> I have tried about 500 variations and have furiously googled and
> read documentation, blogs, guides and tutorials... without
> success.
> 
> And now, in my hour of desperation, I turn to the mailing list. Can
> you please point me in the right direction?
> 
> Humbly yours,
> 
> ------------------------------------------------------------------------------
>
> 
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
> from Actuate! Instantly Supercharge Your Business Reports and
> Dashboards with Interactivity, Sharing, Native Excel Exports, App
> Integration & more Get technology previously reserved for
> billion-dollar corporations, FREE 
> http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk
>
> 
_______________________________________________
> Net-snmp-users mailing list [email protected] 
> Please see the following page to unsubscribe or change other
> options: 
> https://lists.sourceforge.net/lists/listinfo/net-snmp-users
> 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAEBAgAGBQJUgF9NAAoJEB9wRUEh5BQZ0r4QAJZn6CSux+gMnKXl4R8zPt18
CeTObXDQgwQFMr9AB3TH/2/NcmFkeUfoStVu1MfhQgbDFD4gSRNw5ThEa/Q5DgVj
w/0LA8V68ke6zPgyEvh8+uSpcK7SHQLP7xcHRx5EjQRXrEukwbWe+LsKBz2VxoEt
MK60DCU7gr70YgNpIpnWr2EXlV3I1SB26+Cvk287+NRa0spjGKMoGtiyeSQ/f3pi
enGTk6frepCnzJmszaPRSsJP1wUlmW+eXUOBWy54VovorFne7afW10yP3b3iOWcT
oGgzMoRQ4upglOL9zIxFPE9WOm1XF2+rs22yRSLuxrYG1mewDKjFvAVuGu7qccmB
FnClm6aluZSEHtjbqOaqUzJhd/CbGqvmSswmWLJWn3k+8k51p0HEvNB+IhlpWPrD
Lfxn2C9lu+iuLtYjDaC9hbRKzPK5DeFpB2PqCj2sDHPFl5UYhks+tZZYtZz+gLjN
17YTMbcaTSFdVDTMGufCjTtQUNOIiyLgg405gvKaox/V8XaP7YZ8FdGEl5ywB0yD
Gi4WaGCb7gyMQJb8BEDqdPs39oHcm+OUunpW8TZpeBwbUS0HtCQ8UAe+VrWCxtZu
07BzKriezcBg801T1j4Y0sypeyvn7h32CI5xTtucK6XQGEQHtNtjpUXObQSIyVTO
QqzbnG2uki15ANrqxFZU
=6t61
-----END PGP SIGNATURE-----

------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk
_______________________________________________
Net-snmp-users mailing list
[email protected]
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.