如何解析UDP跟踪器响应消息的leecchers / seeders部分?

时间:2019-01-22 08:52:35

标签: java udp p2p bittorrent

我对udp跟踪器响应消息感到困惑,“ 20 + 6 * n”或“ 24 + 6 * n”或“ 20 + 6 * N”是什么意思?我尝试认为20 + 6 * n是数字(索引从16到20)= n个种子,而下标从20到20 + 6 * n的字节表示有关种子的具体信息,6个字节= 4个字节 ip和来自端口的2个字节,但结果是错误的。

Offset      Size            Name            Value
0           32-bit integer  action          1 // announce
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  

以下是我收到的udp跟踪器响应的示例: 0,0,0,1,28,120,62,218,0,0,12,0,0,7,182,0,0,0,1,0,0,0,0,77,73,68,7,156,0, 0,0,1,0,210,39,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,223,112,27,34,0,39,15,0,0,0,0,0,0 ...(全为0)

1 个答案:

答案 0 :(得分:0)

如果数据包格式表示为C结构,则结构的最后一个成员将是flexible array member,其数组成员表示IP:端口对。

换句话说,数据包的尾部由N * 6个字节组成。 20是该尾部开始的字节偏移。