这玩意可真是困扰了我好几天,终于基本搞定了。

很早前就想整个BT服务器玩玩,一直都是最后半途而废。这次总算是把整个过程都弄明白了,其实根本就不是什么难事情,就是资料太难找了,在GOOGLE搜 的关于架设BT服务器的文章还是几年前的那几篇老掉牙的文章,英文又菜得不得了,看文章得用星际译霸一个个翻译。搞得头大了好几天。

现在国内网络上 比较常见的track主要是Bitcomettrack,94BT,还有个btmas,全都不开源,当然也就不在我的选择范围之内了

国外网络上的track主要是bittorrent,BNBT,还有一些完全用PHP做的tracker.

Bittorrent是最原版的BT track了,虽然除了一个 track的功能,但是你可以在上面做很轻易的扩充,也是我的最终选择。

BNBT是用C++编写的track,还带了PHP的发布页面,但感觉发布系统做得太粗糙了,本来想拿过来改一下,看了看代码发现C的部分把很多功能都已 经包括进去了,也懒得去研究它的代码,于是作罢。

至于纯粹用PHP做的tracker和发布系统,经过连续几天在sf.net 上的搜索,找到了一个非常优秀的,BT系统 :Tbsource 。做的超级优秀!其功能齐全程度几乎相当于一个论坛了,看了下代码,好象主要是通过把种子和连接信息写入MYSQL种来实现的,种子信息还好,但是连接信 息是时刻在变化的,这样对数据库的操作会不会太频繁了?可能是我没完全看懂它的原理。我经常上的www.filemp3.org 和bmtorrents.net就是用Tbsource作的,速度和稳定性都很好啊!但是正因为T bsource做的太完善了,我都不知道如何去修改。以后有时间再详细研究下,把其中核心的部分抽出来作成DISCUZ的BT插件,应该是个好主意。
最后还是回到了bittorrent,就用个 tracke就可以了,自己用PHP写个BT发布索引页,应该很简单,省得去研究别人得代码。

安装 Bittorrent

#apt-get install bittorrent

启动 track

#bttrack –dfile downloadlogfile.txt –port 8099
意思就是启动TRACKER,并在当前目录建立日志文件, downloadlogfile.txt ,设置端口为8099

以折种方式启动 tracker的话是不论谁都可以拿你的 tracker做服务器的,如果你想限制只允许上传到本站的种子才能用该服务器的话,可以用下面这种方式启动。

#bttrack –port 8099 –show_names l –allowed_dir /mytorrents –dfile downloadlog.txt

这样的话就只对已经上传到本站/mytorrents目录下的种子提供track服务。

track这样就 可以以了,下面的问题就是如何编写发布系统了

思路很简单,上传BT种子到制定的目录,分析BT种子文件,获得文件名,文件大小等信息并插入数据库,这些信息都是很好搞定的。难搞定的是做种人数目,下 载人数等信息 ,这些数据都是即时的。是直接通过track插入数据库好还是通过PHP 定时查询tracker再在索引页面现实。通过track直接插入数据库的效率肯定要高一点,但觉得这样的即时信息有必要做这样平凡的插入工作么,还不如 通过PHP定时查寻track并生成静态页面现时出来。

OK暂时就这么干了!

首先是BT种子文件的分析问题 ,网络上有牛人用PHP编写的两个流传甚广的种子解析文件,

BDecode.php 和BEncode.php.

把这两个文件 include 后

$array=BDecode(path/to/you/down.torrent);

$array返回的是你种子文件信息的数组。

其中$array[”announce-list”]是该种子使用的 tracker 列表

$infohash=sha1(BEncode($array[”info”] )返回数组的 hash信息(hash要用sha1()解码)

$filesize=$array[”info”][”length”]/1048576返回文件大小

如果是用文件夹做的种子,可以通过下面的方法来获得文件大小

获得文件名:$filename = $array[”info”][”name”]

把上面的种子信息整理下就可以放到数据库里面去了

接下来的问题就是BT的即时信息的获得问题啦。

这些信息可以通过向BT服务器发送GET请求来获得

例如假如你用 bittorrent track 的地址是 http://www.mybt.com:8099/announcd

那么你应该向这个地址发送请求:http://www.mybt.com:8099/scrape

要取得一个种子的信息你需要提供种子的info_hash(这在我们分析种子信息时已得到了)

例如: http://www.mybt.com:8099/scrape?info_hash=……………..

一开始我不管怎么样都没办法取回返回信息,在网上逛了好几天才找到答案

原来在分析种子时得到的info_hash 不能直接用与发送GET请求,还需要经过unicode编码

算法如下:

php种可以通过函数很简单得实现

$s = ‘4686AA54744019E3B44C6E8F5E90F47F3E8E87F8′;

$t = pack(’H*’, $s);

$url_hash=urlencode($t);

ok 现在就可以向track 发送请求了。

require_once (”BEncode.php”);

require_once (”BDecode.php”);

$info = BDecode(file_get_contents(”http://www.mybt.com:8099/scrape?info_hash=”.$url_hash));

返回来的$info是一个数组,我们可以从中取得想要的信息

例如:

完成数:$info[’files’][0][’complete’];《/破》

下载数:$info[’files’][addslashes(hex2bin($hash))][’incomplete’];

其中 hex2bin()是一个16进制转2进制的函数,网上有很多的。

核心内容就这么多,扩展起来就很简单了,可以就做一个索应页面,也可以做个强大的发布系统。

这里有一篇比较详细的结合MYSQL 的代码

http://www.norskwebforum.no/pastebin/976

完!

转自疯狂小强的博客
原文地址:
http://my.donews.com/xiaoqiang/2 ... %e9%a1%b5%e3%80%82/
http://my.donews.com/xiaoqiang/2 ... %e4%b8%8b%ef%bc%89/

转载于:https://blog.51cto.com/luoine/328284

用Bittorrent和PHP搭建BT Tracker服务器和发布页相关推荐

  1. 自建服务器 下bt,使用Docker安装OpenTracker,自建BT Tracker服务器

    OpenTracker用于搭建Tracker服务器,据说该工具性能很强,就连全球最大的BT服务器海盗湾也在使用,有人专门制作了一个OpenTracker的Docker镜像,基本不到1分钟就可以搭建好一 ...

  2. linux bttrack服务,使用Docker安装OpenTracker,自建BT Tracker服务器

    说明:刚刚在LALA大佬博客闲逛了下,看到了个使用OpenTracker搭建Tracker服务器教程,据说该工具性能很强,就连全球最大的BT服务器海盗湾也在使用,这里虽然博主用不到,但考虑到有人会用到 ...

  3. mysql tracker_linux架设BT Tracker服务器小记

    linux架设BT Tracker服务器小记 目前开源的Bt tracker项目有: 官方Tracker为 www.bittorrent.com/ 使用python语言 windows下的tracke ...

  4. 如何修改bt tracker服务器,bt tracker服务器

    bt tracker服务器 内容精选 换一换 云审计服务支持删除已创建的追踪器.删除追踪器对已有的操作记录没有影响,当您重新开通云审计服务后,依旧可以查看已有的操作记录.DELETE /v1.0/{p ...

  5. tracker服务器_.NET Core 开发 BT Tracker 服务器

    (给DotNet加星标,提升.Net技能) 转自:myzony cnblogs.com/myzony/p/10493707.html 一.什么是 BT Tracker  BT下载过程当中,我们如果拿到 ...

  6. bt服务器搭建 linux_用树莓派搭建BT下载服务器

    用树莓派搭建BT下载服务器,外出或睡觉的时候就不用开着电脑下载了,而且更省电.很简单,只要安装 transmission 就可以了,更棒的是它还可以通过 Web 界面控制! 1.首先安装 transm ...

  7. Linux搭建BT下载服务器,linux下搭建bt服务器–xbt篇

    在windows2003下搭建bt服务器对硬件的要求较高,低配置的服务器容易死机,很是麻烦. 我们考虑用linux.据我所知,在linux下面可以作为bt tracker的软件并不是不多.现在介绍两个 ...

  8. linux define路径,linux架设BT Tracker服务器小记

    目前开源的Bt tracker项目有: 官方Tracker为 www.bittorrent.com/ 使用python语言 windows下的tracker www.bitcomet.com/trac ...

  9. [分享]linux架设BT Tracker服务器小记

    原链接:www.taoer.com 目前开源的Bt tracker项目有: 官方Tracker为 www.bittorrent.com/ 使用python语言 xbtt.sf.net 的c++ tra ...

最新文章

  1. 『设计模式』备忘录模式(memento)下象棋,我就想悔棋怎么办
  2. 写一个使两个整数进行交换的方法(不能使用临时变量) 【前端每日一题-27】...
  3. 1069. 微博转发抽奖(20)
  4. 行先知 为您的办公室管理提供方便
  5. 关于redis的持久化
  6. windows下编译lua5.2
  7. 环保数采仪 环保行业的绿色卫士
  8. sharp s2 android 9,夏普s2第三方ROM AOSP(Android P)v105
  9. 在windows下编译gmplib并使用vs2010成功调用
  10. 《⑨也懂系列:MinGW安装教程Ver.2》著名C/C++编译器GCC的Windows版本
  11. python 密码输入显示星号_[145]python实现控制台密码星号输入
  12. 3DsMax——竹篮制作
  13. 中国云计算产业2016年度点评
  14. K8s 污点(Taints)与容忍(Tolerations)
  15. 电路模型和电路定律(Ⅲ)
  16. 孙子兵孙子兵法全文_孙子兵法:如何应用于软件
  17. linux如何查看disk状态类型,Linux下如何查看你的disk的信息
  18. qtp 连接mysql_qtp 怎样连接mysql数据库操作_MySQL
  19. 3维空间中点、线、面之间的数学关系(python代码)
  20. autobahn的helloworld

热门文章

  1. vue3.0“ Uncaught TypeError: Cannot read property ‘use‘ of undefined”报错解决......
  2. 10.2国庆作业(PWM实验)
  3. 塞班 s60v5 开发
  4. AM335x启动流程(bootrom)
  5. 软件缺陷及其生命周期
  6. safari浏览器下载中文文件名出现的乱码问题
  7. 在 Kubernetes 中使用 Keycloak OIDC Provider 对用户进行身份验证
  8. 期待已久的《刀剑神域》第三季终于来了
  9. VS集成Qt环境搭建
  10. 贴片陶瓷电容材质NPO、C0G、X7R、X5R、Y5V、Z5U区别