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))
这是我的第一个问题,所以希望它是正确的。
我正在尝试从 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))