我目前正在尝试在nodeJS中实现最小的洪流客户端。
我正在阅读以下规范:https://wiki.theory.org/index.php/BitTorrentSpecification
我有2个磁铁URI:
magnet:?xt=urn:btih:633ab5b0cc27218bca2f9fec9b68ae4f7cbf0c5f&dn=dmb2017-05-31.dpa4021.flac16
xt=urn:btih:633ab5b0cc27218bca2f9fec9b68ae4f7cbf0c5f
dn=dmb2017-05-31.dpa4021.flac16
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
xt=urn:btih:9f9165d9a281a9b8e782cd5176bbcc8256fd1871
dn=Ubuntu+16.04.1+LTS+Desktop+64-bit
tr=udp://tracker.leechers-paradise.org:6969
tr=udp://zer0day.ch:1337
tr=udp://open.demonii.com:1337
tr=udp://tracker.coppersurfer.tk:6969
tr=udp://exodus.desync.com:6969
根据我的阅读,跟踪器用于查找对等节点,并从中下载数据。那么,如何下载第一个种子?它没有追踪器。
我实际上如何进行这种连接?
该规范在磁链上没有任何内容,并声明可以通过HTTP(S)协议使用跟踪器,但显然是UDP。
我对此刺了一下:
var PORT = 6969 ;
var HOST = 'tracker.leechers-paradise.org';
var dgram = require('dgram');
var message = new Buffer("xt=urn:btih:9f9165d9a281a9b8e782cd5176bbcc8256fd1871");
var client = dgram.createSocket('udp4');
client.on('listening', function () {
var address = client.address();
console.log('UDP Server listening on ' + address.address + ":" + address.port);
});
client.on('message', function (message, remote) {
console.log(remote.address + ':' + remote.port +' - ' + message);
});
client.send(message, 0, message.length, PORT, HOST, function(err, bytes) {
if (err) throw err;
console.log('UDP message sent to ' + HOST +':'+ PORT);
console.log(bytes);
});
显然,这是行不通的,但是我找不到任何文档可以提供帮助。
最佳答案
毫无疑问,非正式的Wiki.theory.org/BitTorrentSpecification是开始学习BitTorrent协议的最佳场所,但是它并不完整。它仅涵盖基本协议和在早期开发的扩展。这就是为什么您无法在那里找到所需的所有信息的原因。
自2008年以来,该协议的官方*文档可在BitTorrent.org中找到。
基本协议的正式版本是简洁而密集的BEP3 - The BitTorrent Protocol Specification。
磁铁链接在BEP9 - Extension for Peers to Send Metadata Files中进行了介绍。
您可以阅读以下内容:
如果未指定跟踪器,则客户端应使用DHT来获取对等体。
DHT在BEP5 - DHT Protocol中指定。
您已经注意到,如今的跟踪器使用UDP,它在BEP15 - UDP Tracker Protocol中指定。
脚注:*官方仅表示它由BitTorrentInc运行,而不是其上级或唯一使用的来源。 BitTorrent协议不受权限管理。没有客户承诺效忠BEP。该协议由实际客户的共识形成。
关于node.js - 连接到洪流跟踪器/同伴,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44332799/