当前位置: 首页 > 后端技术 > Python

Python协议分析

时间:2023-03-26 12:18:21 Python

1.使用bytes方法进行协议解析打包:bin_buff=bytes()bin_buff+=(0x1234).to_bytes(2,byteorder='big')bin_buff+=(0x56).to_bytes(1,byteorder='big')print('0x%s'%bin_buff.hex())#output0x123456b1=int.from_bytes(bin_buff[1:3],byteorder='big')print('0x%x'%b1)#output0x34562。如果根据c中的struct,也可以使用importstruct导入struct模块。使用packunpack写结构体时,结构如下:struct{unsignedchara;无符号短b;unsignedcharc;}应该按照下表进行压缩,对应使用的格式为BHBprint('0x%s'%struct.pack('BHB',0x12,0x3456,0x78).hex())打印出来并且似乎在0x12之后添加了一个0x00用于对齐。c中如何实现1字节对齐看这个描述不是很清楚,测试效果如下print('0x%s'%struct.pack('@BHB',0x12,0x3456,0x78).hex())print('0x%s'%struct.pack('=BHB',0x12,0x3456,0x78).hex())print('0x%s'%struct.pack('BHB',0x12,0x3456,0x78).hex())print('0x%s'%struct.pack('!BHB',0x12,0x3456,0x78).hex())打印出@和什么都不加一样,应该是默认的:paddingalignment4bytes,hostbyteorder。剩下的=<>!没有填充=应该是原生字节序,在x8中所有在6上测试的都是小端和以大端方式排列