全部 - 我正在使用 python 和 pysnmp 通过 snmp 收集 Cisco 发现协议数据。由于我正在使用 CDP,因此我使用的是CISCO-CDP-MIB.my我面临的问题是解压缩 cdpCacheCapabilities 和 cdpCacheAddressType 的内容。我看过很多示例并在我的代码中尝试过,但它们对我的特定场景没有帮助。请帮助我了解解包背后的原则,以便我不仅可以将它们应用于我正在工作的两个 MIB,而且还可以应用于其他也可能以打包格式返回数据的 MIB。cdpCacheCapabilities 的结果应该类似于“00000040”,我已经能够打印结果,但是“0x”总是在我的值之前,我只需要这个值,没有符号。cdpCacheAddress 的结果应该是一个十六进制的 IP 地址。对于 cdpCacheAddress 我需要首先解压缩内容,从而给我留下一个十六进制字符串,然后将其转换为 IP 地址,即“
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)