如何在python结构中解压缩变量长度数据

时间:2015-12-06 12:52:02

标签: python struct bittorrent

我正在构建一个p2p应用程序,我需要从跟踪器中解压缩udp通知响应。

announce response:

Offset      Size            Name            
0           32-bit integer  action        
4           32-bit integer  transaction_id
8           32-bit integer  interval
12          32-bit integer  leechers
16          32-bit integer  seeders
20 + 6 * n  32-bit integer  IP address
24 + 6 * n  16-bit integer  TCP port
20 + 6 * N

我需要读取上表中name字段中列出的所有数据,但是seeders,ip address和port的值是可变的。

如何使用python struct正确解包响应中的所有数据?

1 个答案:

答案 0 :(得分:1)

struct模块非常适用于解包二进制数据。

action, transaction_id, interval, leechers, seeders = struct.unpack('>iiiii', announse_response)

然后,您必须循环其余数据以获取所有IP /端口数据:

ip_port_list = []
while True:
    try: ip_port_list.append(struct.unpack('>ih', announse_response))
    except: break

如果没有struct,你将不得不逐字节读取,然后转换大端问题。