如何从http跟踪器响应中解析Ip和端口

时间:2018-04-30 05:53:43

标签: p2p bittorrent tracker

我正在向跟踪器发送请求并获得回复

d8:completei2e10:downloadedi1e10:incompletei1e8:intervali1971e12:min intervali985e5:peers18:\ 235'\ 027 \ 253 \ 000 \ 000 \ 331e57 \ 374- \ 033“\ 022,\ 270 \ 302e

如何从此响应中获取对等体列表或对等IP和端口

1 个答案:

答案 0 :(得分:2)

来自跟踪器的响应是 bencoded 为清晰起见,添加一些空格:

d
 8:complete
  i2e
 10:downloaded
  i1e
 10:incomplete
  i1e
 8:interval
  i1971e
 12:min interval
  i985e
 5:peers
  18:\235'\027\253\000\000\331e57\374-\033"\022,\270\302
e

具有18字节二进制字符串对等包含'compact = 1'<中的对等项/ em> -form在[BEP23 - Tracker Returns Compact Peer Lists][the wiki]

中指定

每个对等体由 bigendian 中的6个字节,4个字节IPv4 + 2个字节PORT表示,因此18个字节的字符串用于3个对等体。

\235 ' \027 \253 \000 \000=>157 39 23 171 0 0(0*256+0=0)          =>157.39.23.171:0
\331 e 5    7    \374 -   =>227 101 53 55 252 45(252*256+45=64557)=>227.101.53.55:64557 
\033 " \022 ,    \270 \302=>27 34 18 44 184 192(184*256+192=47298)=>27.34.18.44:47298  

(\ 235是八进制表示157,'具有ASCII值39等。)