【python】根據給定的協議,解析一個hexdump 字符串
一、場景
在于客戶進行協議交互時,對方給出了協議和一串hex dump字符串, 通過python腳本解析接口的各個字段
二、struct庫的介紹
官方的文檔
https://docs.python.org/zh-cn/3/library/struct.html
2.1了解大序端和小序端

原生字節順序可能為大端序或小端序,具體取決于主機系統。
例如,Intel x86, AMD64 (x86-64) 和 Apple M1 是小端序的;IBM z 和許多舊式架構則是大端序的。
請使用 sys.byteorder 來檢查你的系統字節順序。
2.2格式字符

三、腳本編寫
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

浙公網安備 33010602011771號