2017-06-02 66 views
1

我目前正在嘗試在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); 

}); 

顯然,這是不行的,但我無法找到任何文件,以幫助。

回答

0

非官方的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。該協議是由真實客戶的共識形成的。

+0

那麼,還有HTTP跟蹤器嗎?這很酷,我可以使用瀏覽器客戶端。感謝您的額外信息! – Tobiq

+0

是否有單個DHT?我在哪裏連接?這一切都令人困惑 – Tobiq

+1

公共HTTP跟蹤器在受歡迎時往往會死亡,因爲與UDP跟蹤器相比,HTTP跟蹤器佔用的資源要多得多。無論如何,你可以在這裏找到一個列表:https://github.com/ngosang/trackerslist只有瀏覽器的bittorrent客戶端是不可能的,因爲你需要通過原始TCP或uTP/UDP連接到其他對等端。webtorrent假裝是一個真正的bittorrent客戶端,但它不是,因爲它不能連接到任何以前存在的客戶端。 – Encombe