没有合适的资源?快使用搜索试试~ 我知道了~
讲述在linux下BT服务器是如何架设的!
资源推荐
资源详情
资源评论
[ 教程 ] 用 Bittorrent 和 PHP 搭建 BT Tracker 服务器和发布页
这玩意可真是困扰了我好几天,终于基本搞定了。
很早前就想整个 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 进制的函数,网上有很多的。
核心内容就这么多,扩展起来就很简单了,可以就做一个索应页面,也可以做个强大的发
布系统。
剩余10页未读,继续阅读
资源评论
wanghuanwd
- 粉丝: 1
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功