UDP torrent跟踪器没有回复

时间:2017-06-03 14:51:47

标签: bittorrent

我终于到达了从UDP跟踪器获得响应的阶段。

这是一个例子,我分成了一个数组:

  

[1,3765366842,1908,0,2,0]

Action, request ID, interval, leechers, seeders, peers.

无论我选择哪种种子,我都会得到1/2播种机,我假设它是跟踪我的服务器,而没有同伴/ leechers。

我没有使用正确的信息哈希吗?

这是我从磁铁链接中检索它的方式:

magnet:?xt=urn:btih:9f9165d9a281a9b8e782cd5176bbcc8256fd1871&dn=Ubuntu+16.04.1+LTS+Desktop+64-bit&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Fzer0day.ch%3A1337&tr=udp%3A%2F%2Fopen.demonii.com%3A1337&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Fexodus.desync.com%3A6969

...

  

h = 9f9165d9a281a9b8e782cd5176bbcc8256fd1871

现在我将其拆分为两个块,并解析它们,以换算十六进制字节:

bytes = []; 
for (var i = 0; i < h.length; i++) bytes.push(parseInt((h[i]) + h[i++], 16));
  

[153,153,102,221,170,136,170,187,238,136,204,85,119,187,204,136,85,255,17,119]

没有必要对此进行编码,因此我将其与我的请求一起发送。

这是造成麻烦的唯一一点,但似乎很简单......

http://xbtt.sourceforge.net/udp_tracker_protocol.html

2 个答案:

答案 0 :(得分:1)

正如8472所说,你的解码不正确:

for (var i = 0; i < h.length; i++) bytes.push(parseInt((h[i]) + h[i++], 16));

ii++在此处具有相同的值。 (避免使用聪明的内联内容的原因之一。)您可以使用i++i,也可以将其全部展开为多行以提高可读性:

for (var i = 0; i < h.length; i += 2) {
    var hex = h.substr(i, 2);
    bytes.push(parseInt(hex, 16));
}

如果您正在使用Node,只需将其解析为Buffer,如果需要,可以很容易地将其转换为数组:

var bytes = Buffer.from(h, 'hex');

答案 1 :(得分:0)

  

9f91

应该导致前两个字节为159,145,因此十六进制解码不正确。

除此之外,您应该通过wireshark将您的实施与工作实施进行比较。

  

http://xbtt.sourceforge.net/udp_tracker_protocol.html

正如在另一个问题的答案中已经提到的,官方和最新的规范驻留在bittorrent.org,其中包括UDP跟踪器规范。不维护xbtt页面。