# Various SNMP versions

## SNMPv2c

Send SNMP GET request using the following options:

> - with SNMPv1, community ‘public’

> - over IPv4/UDP

> - to an Agent at demo.snmplabs.com:161

> - for two instances of SNMPv2-MIB::sysDescr.0 MIB object,

Functionally similar to:

$ snmpget -v2c -c public demo.snmplabs.com SNMPv2-MIB::sysDescr.0

    from pysnmp.hlapi.asyncore import *

    # noinspection PyUnusedLocal,PyUnusedLocal,PyUnusedLocal
    def cbFun(snmpEngine, sendRequestHandle, errorIndication,
              errorStatus, errorIndex, varBinds, cbCtx):
        if errorIndication:
            print(errorIndication)
            return
        elif errorStatus:
            print('%s at %s' % (errorStatus.prettyPrint(),
                                errorIndex and varBindTable[-1][int(errorIndex) - 1][0] or '?'))
            return
        else:
            for varBind in varBinds:
                print(' = '.join([x.prettyPrint() for x in varBind]))

    snmpEngine = SnmpEngine()

    getCmd(snmpEngine,
           CommunityData('public'),
           UdpTransportTarget(('demo.snmplabs.com', 161)),
           ContextData(),
           ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)),
           cbFun=cbFun)

    snmpEngine.transportDispatcher.runDispatcher()

`Download` script.

## Walk whole MIB

Send a series of SNMP GETNEXT requests using the following options:

- with SNMPv3, user ‘usr-md5-none’, MD5 authentication, no privacy

- over IPv4/UDP

- to an Agent at demo.snmplabs.com:161

- for all OIDs in IF-MIB

Functionally similar to:

$ snmpwalk -v3 -lauthNoPriv -u usr-md5-none -A authkey1 -X privkey1
demo.snmplabs.com IF-MIB::

    from pysnmp.hlapi.asyncore import *

    # noinspection PyUnusedLocal,PyUnusedLocal,PyUnusedLocal
    def cbFun(snmpEngine, sendRequestHandle, errorIndication,
              errorStatus, errorIndex, varBindTable, cbCtx):
        if errorIndication:
            print(errorIndication)
            return
        elif errorStatus:
            print('%s at %s' % (errorStatus.prettyPrint(),
                                errorIndex and varBindTable[-1][int(errorIndex) - 1][0] or '?'))
            return
        else:
            for varBindRow in varBindTable:
                for varBind in varBindRow:
                    print(' = '.join([x.prettyPrint() for x in varBind]))

        return True  # request lower layers to do GETNEXT and call us back

    snmpEngine = SnmpEngine()

    nextCmd(snmpEngine,
            UsmUserData('usr-md5-none', 'authkey1'),
            UdpTransportTarget(('demo.snmplabs.com', 161)),
            ContextData(),
            ObjectType(ObjectIdentity('SNMPv2-MIB', 'system')),
            ObjectType(ObjectIdentity('IF-MIB', 'ifTable')),
            cbFun=cbFun)

    snmpEngine.transportDispatcher.runDispatcher()

`Download` script.

See also: library reference.