UDP 洪流跟踪器不回复

UDP torrent trackers not replying

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

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

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

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

无论我选择哪个 torrent,我都会得到 1/2 的播种者,我假设这是服务器跟踪我,没有同行/leechers。

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

这就是我从磁铁中取回它的方法link:

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

9f91

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

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

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

正如在对另一个问题的回答中提到的,官方和最新规范位于 bittorrent.org,其中包括 UDP 跟踪器规范。 xbtt 页面未维护。

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

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');