【python】根据给定的协议,解析一个hexdump 字符串

一、场景

  在于客户进行协议交互时,对方给出了协议和一串hex dump字符串, 通过python脚本解析接口的各个字段

 

 

二、struct库的介绍

官方的文档

https://docs.python.org/zh-cn/3/library/struct.html

2.1了解大序端和小序端

image

 原生字节顺序可能为大端序或小端序,具体取决于主机系统。

例如,Intel x86, AMD64 (x86-64) 和 Apple M1 是小端序的;IBM z 和许多旧式架构则是大端序的。

请使用 sys.byteorder 来检查你的系统字节顺序。

 

2.2格式字符

image

 

 

三、脚本编写

import struct
import chardet

hex_string = "AA 44 12 1C B9 05 00 A0 7E 00 00 00 71 A0 D7 08 90 28 12 17 00 00 00 00 E2 54 16 37 01 00 00 00 35 00 00 00 88 33 13 99 DA 28 3F 40 72 0B 6A 50 6B 4B 5E 40 00 00 70 FD 1B 69 39 40 56 9F 2A 41 CF 06 CE FC CD 22 5B BF BC 59 D9 24 26 C0 41 3F 99 39 74 49 F3 FC 70 3F 75 B4 32 2C 45 C6 E2 BF C8 A9 48 E8 93 10 0D 40 CB AC A2 59 E1 25 63 40 AB ED 25 3E 61 56 22 3E 9D 7D 22 3E 1D 15 1F 3C 87 28 1F 3C 58 E2 35 3B 19 52 2F 3E 3E 7A E0 3D 4A DA AA 40 01 00 00 00 00 00 8E 8C 49 9E 0A"
# 去除空格并转换为二进制
binary_data = bytes.fromhex(hex_string.replace(' ', ''))

# 输出二进制数据(以字节形式)
result = chardet.detect(binary_data)
print(binary_data, len(binary_data)) print("Sync:", struct.unpack('<c', binary_data[0:1])[0]) print("Sync:", struct.unpack('<c', binary_data[1:2])[0]) print("Sync:", struct.unpack('<c', binary_data[2:3])[0]) print("Header Length:", struct.unpack('<B', binary_data[3:4])[0])

这样我们就可以解析出来协议对应每个字段的值

 

参考链接:

https://docs.python.org/zh-cn/3/library/struct.html

 

posted @ 2025-09-30 17:48  代码诠释的世界  阅读(10)  评论(0)    收藏  举报