All - I am working with python and pysnmp to collect Cisco Discovery Protocol data via snmp. Since I am working with CDP, I am using the CISCO-CDP-MIB.my and the issues that I am facing are with unpacking the contents of cdpCacheCapabilities and cdpCacheAddressType. I have seen many examples and tried them in my code, but they do not help my particular scenario. Please help me understand the principles behind unpacking so that I can not only apply them to the two MIBs I am working but also with other MIBs that are also likely to return data in a packed format. The results of the cdpCacheCapabilities should be similar to "00000040", I've gotten as far as being able to print the results, but "0x" always precedes my value, I need the value only, without the notation. The results of cdpCacheAddress should be an IP address in hex notation. For cdpCacheAddress I need to first unpack the contents, thus leaving me with a hex string and then convert that to an IP address i.e. "192.168.1.10". Kindly explain the logic behind your answer so that I can adjust it in other scenarios. Thanks
from pysnmp.hlapi import *
from pysnmp import debug
import binascii
import struct
#use specific flags or 'all' for full debugging
#debug.setLogger(debug.Debug('dsp', 'msgproc'))
for (errorIndication,
     errorStatus,
     errorIndex,
     varBinds) in nextCmd(SnmpEngine(),
                          CommunityData('public'),
                          UdpTransportTarget(('10.1.1.1', 161)),
                          ContextData(),
                          ObjectType(ObjectIdentity('CISCO-CDP-MIB', 'cdpCacheCapabilities')),
                          lookupNames=True,
                          lookupValues=True,
                          lexicographicMode=False):
    if errorIndication:
        print(errorIndication)
        break
    elif errorStatus:
        print('%s at %s' % (errorStatus.prettyPrint(),
                            errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
        break
    else:
        for varBind in varBinds:
            value = varBind[-1]
            arg = value.prettyPrint()
            print(arg)
            #dec = format(value,'x')
            #dec = repr(value)
            dec = struct.unpack('c',value)
            print(dec)
 
                        
By enabling MIB lookup you are asking pysnmp to use MIB to convert SNMP variable-binding pairs (OID and value) into something human-friendly.
If you need just bare, non-formatted values and assuming that the type of these two managed objects are
OCTET STRING, you can call.asOctets()or.asNumbers()methods on the value to get a sequence of either a rawstr|bytesorint:EDIT:
Once you have raw values, you can turn them into whatever: