SNMP - 解码十六进制字符串值

SNMP - Decode Hex String Value

这是我的第一个问题,所以希望它是正确的。

我正在尝试从 ZTE C300 OLT 获取一些信息。 问题是当我尝试获取其中一个 ONTS 的 SN 时,我得到了 HEX-String

中的响应
snmpwalk -cpublic -v2c [OLTIP] 1.3.6.1.4.1.3902.1082.500.10.2.2.5.1.2

这是我得到的回复

SNMPv2-SMI::enterprises.3902.1082.500.10.2.2.5.1.2.285278736.1 = Hex-STRING: 5A 54 45 47 C8 79 9B 27

这是我在 OLT ZTEGC8799B27 上的 SN,但我试图将 HEX-STRING 转换为文本,但我没有得到该 SN 文本。

我确实有一个 python SNMP 脚本,我得到的 OID 响应是

{'1.3.6.1.4.1.3902.1082.500.10.2.2.5.1.2.285278736.1': "ZTEGÈy\x9b'"}

有人可以帮我解决这个问题吗?。我是 SNMP 的新手,这让我有些头疼。 提前致谢!

这是一个 8 字节的十六进制字符串,前 4 个字节是 ASCII。 只需将十六进制 2 转换为 ascii。

确实更容易。前 4 个字节被编码,另外 4 个是每 2 位拆分的实际序列号。所以我只需要解码第一部分并连接其余部分。

适用于OLT ZTE C320

def hex_str(str):
    
    str = str.strip()
    str = str.split(' ')

    vendor_id = ''
    serial = str[4:]
    serial = "".join(serial)

    for hex_byte in str[:4]:
        vendor_id += chr(int(hex_byte, 16))
        
    normalized_serial = vendor_id + serial

    return normalized_serial


def ascii_to_hex(str):

    arr = []
    hex_byte = ''
    
    for i in range(len(str)):
        hex_byte += hex(ord(str[i]))
        
    hex_byte = hex_byte.replace('0x', ' ')
    hex_byte = hex_str(hex_byte)
    
    return hex_byte
    

# value = f"5A 54 45 47 C8 79 9B 27 "
# value = f"49 54 42 53 8B 69 A2 45 "
# value = f"ZTEGÈy\x9b'"
value = f"ITBS2Lz/"
# value = f"ITBS2HP#"

if(len(value) == 24):
    print(hex_str(value))
else:
    print(ascii_to_hex(value))