返回

bittorrent-tracker:自建tracker服务器用于文件分享

缘起

众所周知bittorrent是一款P2P的文件传输协议,能够让两台内网机器实现点对点的文件传输。

随着各种资源的丰富,bit下载也越来越为大众所熟知。

我们都知道,两台内网机器,直接使用http是无法进行文件分享的。

要么使用网盘,有限速和和谐风险。

要么使用服务器,但是成本比较高。

要么使用P2P同步工具,但是要安装专用的软件。

故这里尝试使用BT协议做文件分享,即将要分享的文件打包成种子,然后将种子传给对方。大部分人都是有BT下载工具的。

由于共有tracker存在安全隐患,本篇文章就是介绍如何搭建私有tracker服务器。主要介绍VPS搭建,也提供heroku搭建。

在VPS上使用bittorrent-tracker

这是webtorrent项目的一个部分。使用nodejs进行搭建部署。

官方有英文文档,这里我简单说一下如何使用:

首先要下载nodejsnpm

apt install nodejs
apt install npm

然后安装bittorrent-tracker包:

npm install bittorrent-tracker

新建一个server.js文件,设置一个最简单的服务器,更多可以参考文档

    // Create a web sockets signaling server
    let lookup = {}

    const hostname = '0.0.0.0';
    const port = process.env.PORT || 3001;


    var Server = require('bittorrent-tracker').Server

    var server = new Server({
        udp: false, // enable udp server? [default=true]
        http: true, // enable http server? [default=true]
        ws: true, // enable websocket server? [default=true]
        stats: true, // enable web-based statistics? [default=true]
    })

    server.on('error', function (err) {
        // fatal server error!
        //console.log(err.message)
    })

    server.on('warning', function (err) {
        // client sent bad data. probably not a problem, just a buggy client.
        //console.log(err.message)
    })

    server.on('listening', function () {
        // fired when all requested servers are listening
        console.log('Signal server http port:' + server.http.address().port)
        console.log('Signal server ws port:' + server.ws.address().port)
    })

    // listen for individual tracker messages from peers:
    server.on('start', function (addr) {
        console.log('got start message from ' + addr)
        Object.keys(server.torrents).forEach(hash => {
            lookup[server.torrents[hash].infoHash] = server.torrents[hash].peers.length
            //console.log("peers: " + server.torrents[hash].peers.length)
        })
    })

    server.on('complete', function (addr) {})
    server.on('stop', function (addr) {})

    // start tracker server listening! Use 0 to listen on a random free port.
    server.listen(port, hostname, 'listening')

然后运行即可:

node server.js

默认的使用端口为3001

root@kerms01:~/tracker# node server-test.js
Signal server http port:3001
Signal server ws port:3001

访问对应地址,返回:

d14:failure reason33:invalid action in HTTP request: /e

其他实现方式——Heroku搭建

此外,这个还有人写了heroku和Glitch的部署方式。我所用的配置文件就是从这个项目里面截取出来的,如果没有VPS也可以尝试这个工具,但是我不保证数据持久性。

其他实现方式——opentracker

有一篇文章专门讲这个(参见8、9)

但是我搭建有点失败,编译报了错误,所以放弃了

大家可以去尝试一下啊

附录

参考文章

  1. node.js - bittorrent tracker seeder and leecher in nodejs - Stack Overflow 关于如何设置seeder
  2. javascript - How to run Bittorrent-Tracker? - Stack Overflow 简单的配置文件
  3. GitHub - webtorrent/bittorrent-tracker: 🌊 Simple, robust, BitTorrent tracker (client & server) implementation 项目主地址
  4. BT服务器的搭建(tracker-P2P服务器架设)(转) - EasonJim - 博客园 (cnblogs.com) 原版搭建
  5. 用Bittorrent和PHP搭建BT Tracker服务器和发布页_liwf616的专栏-CSDN博客 +1
  6. 搭建自己的BT Tracker | 桜庭清夏的小站 (sakurabakiyoka.com) Chihaya搭建
  7. BitTorrent Tracker 搭建及使用_threeboss的博客-CSDN博客_bit tracker xbt搭建
  8. 一个linux vps中用C做的开源和免费的高性能BitTorrent Tracker通讯服务器 (OpenTracker中文教程) - 各类教程 - ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com opentracker
  9. opentracker | erdgeist.org +1
  10. GitHub - draeder/p2p-tracker: A heroku-ready WebTorrent tracker for use with P2P applications.

版权信息

本文原载于kermsite.com,复制请保留原文出处。

Built with Hugo
Theme Stack designed by Jimmy