用python解码二进制协议
我正在尝试编写一个简单的python客户机来解码由一个名为的程序生成的二进制流 协议如下所示(为方便起见,复制如下)。我的理解是,前42个字节应该包含我认为用python模块读取/解码的元帧 我从一件非常简单的事情开始用python解码二进制协议,python,protocols,binary-data,software-defined-radio,binary-deserialization,Python,Protocols,Binary Data,Software Defined Radio,Binary Deserialization,我正在尝试编写一个简单的python客户机来解码由一个名为的程序生成的二进制流 协议如下所示(为方便起见,复制如下)。我的理解是,前42个字节应该包含我认为用python模块读取/解码的元帧 我从一件非常简单的事情开始 import select, socket from struct import * port = 19090 bufferSize = 512 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(('loc
import select, socket
from struct import *
port = 19090
bufferSize = 512
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('localhost', port))
s.setblocking(0)
i=0
while i<10:
result = select.select([s],[],[])
msg = result[0][0].recv(bufferSize)
# The meta section?
msg = msg[:42]
# Log raw bytes
#print ' '.join('{0:08b}'.format(ord(x), 'b') for x in msg)
print unpack(">QIxBHIHIIIQ", msg) # big endian
i += 1
导入选择,套接字
从结构导入*
端口=19090
缓冲区大小=512
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s、 绑定(('localhost',端口))
s、 设置锁定(0)
i=0
虽然我没有任何例子,但我在过去几天遇到了类似的问题,因此我找到了这个库。但这里有一个例子:
如果没有问题,我也可以删除我的答案。我没有任何例子,但我在过去几天遇到了类似的问题,因此我找到了这个库。但这里有一个例子:
如果不合适,我也可以删除我的答案。一个起点不使用struct
解码,为什么?你永远不会确定我的解码模式是正确的。这样:hex\u val=binascii.hexlify(sock.recv(512))
。您的问题状态模糊,因为AUTH、ACK、SYN等部分在哪里?如果您完成了所有的packet=bin(hex_val[84])
则不是正确的部分UDP
packet不仅可以在单个UDP数据包中插入multi-header+data
。如果丢失了一部分数据(数据的下一部分未定义),则无法对数据包进行解码。(如果可能,请添加wireshark转储)。起始点不使用struct
进行解码,为什么?你永远不会确定我的解码模式是正确的。这样:hex\u val=binascii.hexlify(sock.recv(512))
。您的问题状态模糊,因为AUTH、ACK、SYN等部分在哪里?如果您完成了所有的packet=bin(hex_val[84])
则不是正确的部分UDP
packet不仅可以在单个UDP数据包中插入multi-header+data
。如果丢失了一部分数据(未定义数据的下一部分),则无法对数据包进行解码。(如果可能,请添加wireshark转储)。
hardware block (2 byte I or Q samples):
|I/Q:I/Q:I/Q:I/Q:I/Q:I/Q:I/Q:I/Q:I/Q:I/Q:I/Q:I/Q:I/Q|
UDP block (22 bytes):
|xxxxxxxxxxxxxxxxxxxxxx|
Frame:
|Meta:xxxxxxxxxxxxxxxxx|I/Q:I/Q:I/Q:I/Q:I/Q:xx|I/Q:I/Q:I/Q:I/Q:I/Q:xx|I/Q:I/Q:I/Q:xxxxxxxxxx|
Number of samples in a hardware block: 13
Number of blocks in a frame..........: 1 (always if uncompressed)
Number of bytes in a frame...........: 52 (4 * 13)
Complete blocks......................: 2 (calculated)
Remainder samples....................: 3 (calculated)