p2p文件共享实现 python_python实现p2p下载 - CSDN
精华内容
参与话题
  • P2P之BitTorrent服务器搭建

    千次阅读 2017-04-10 16:51:17
    P2P之BitTorrent服务器...BitTorrent是P2P应用的典型代表,是开源的,通过分析源代码可以帮助开发特定的P2P文件共享系统。下面的网址可以下载BitTorrent先前版本源码及客户端安装程序:http://download.bittorrent.co

    P2P之BitTorrent服务器搭建

     
    http://blog.sina.com.cn/s/blog_437cbe1b0100f5oq.html
    BitTorrent是P2P应用的典型代表,是开源的,通过分析源代码可以帮助开发特定的P2P文件共享系统。下面的网址可以下载BitTorrent先前版本源码及客户端安装程序:http://download.bittorrent.com/dl/archive/
    tracker服务器记录所有节点(peer)的信息以便协调各peer之间的相互传输,包含tracker的机子上可以不包含torrent种子文件和下载源。torrent种子文件主要记录了tracker服务器的地址,端口号及要下载的文件信息摘要等。第一个peer为发布者,必须包含完整的文件,还需要自己制作种子注册到tracker并将种子发布到Internet。新用户通过BitTorrent客户端下载获取torrent文件信息,成为一个peer(既下载又上传),同tracker通信,从其他peers下载文件。
     
    1.下载Python-2.3b2.exe。下载地址:http://www.python.org/ftp/python/2.3/Python-2.3b2.exe。(BitTorrent用Python语言编写,先建立Python运行环境,要设置环境变量PATH为Python的安装目录)
    2.下载BitTorrent-4.0.3源代码。下载地址:http://download.bittorrent.com/dl/archive/BitTorrent-4.0.3.tar.gz,解压放在“C:\Test\BitTorrent-4.0.3”目录,点击运行-》cmd-》cd C:\Test\BitTorrent-4.0.3-》python bttrack.py --port 6969 --dfile dstate 运行tracker服务器。(不要关闭命令行窗口)
    3.安装Web服务器。(把iis网站根目录指向C:\Test\BitTorrent-4.0.3)
    4.制作torrent种子文件。再次打开另外一个cmd窗口进入“C:\Test\BitTorrent-4.0.3”目录,命令行输入如下图所示,主要包括tracker服务器的url和提供下载源的本地文件本地url。敲击回车键后可以发现在“C:\Test\BitTorrent-4.0.3”目录下多了music.wma.torrent文件,music.wma即为本地下载源,music.wma.torrent即为种子文件。
    P2P之BitTorrent服务器搭建
    5.种子文件注册。作为第一个peer,光制作出种子文件还不够,还需要告知tracker服务器,通过tracker把下载资源信息发布出去。
    C:\Test\BitTorrent-4.0.3\python btdownloadheadless.py --url http://localhost/music.wma.torrent --save_as C:\Test\BitTorrent-4.0.3\music.wma
     
    PS:4,5两步才算真正制作出了可以提供BT下载的种子,你可以把torrent文件发到网上供其他人从你机子上下载。()
    发布中的共享资源:
    P2P之BitTorrent服务器搭建
    tracker的显示结果:
    P2P之BitTorrent服务器搭建
    最后安装BitTorrent客户端程序(下载地址:http://download.bittorrent.com/dl/archive/BitTorrent-4.0.3.exe),下载打开torrent,获取torrent上的文件。
    展开全文
  • tracker-P2P服务器架设

    万次阅读 2017-02-16 09:29:22
     传统的文件下载服务都是基于客户机/服务器模型,被下载的文件放在服务器上,用户登录服务器,将该文件下载到本地。在文件下载的过程中,被传输文件的来源和目的端并不对等,服务器只是单向地将文件传送给客户端。

    转载:http://hi.baidu.com/kouzl/blog/item/5c7101c2adee5e000ff47796.html


    一、bt原理介绍

        传统的文件下载服务都是基于客户机/服务器模型,被下载的文件放在服务器上,用户登录服务器,将该文件下载到本地。在文件下载的过程中,被传输文件的来源和目的端并不对等,服务器只是单向地将文件传送给客户端。

        这种传统软件下载模式的缺点是显而易见的,整个系统的瓶颈位于服务器。由于受到服务器处理能力、互联网接入链路带宽等多种环境的制约,当下载量非常大时,服务器往往不堪重负。而用户下载完毕后就和服务器没有任何联系,其它用户也无法从以前用户下载的版本得到任何帮助。

    随着互联网技术的不断发展,P2P(Peer To Peer,点到点)技术逐渐成为文件交换和下载的成熟技术。P2P技术将互联网“自由、平等、互助、共享”的精神发扬光大。

        最早的P2P技术是音乐交换软件Napster,目前最流行的P2P文件交换技术则是BT(BitTorrent,比特流)。越来越多的人使用BT共享和 下载软件,互联网上提供“种子”的网站及BT客户端软件随处可见,但是互联网上有关架设BT服务器的文章大多针对Windows平台,而且往往没有涉及 BT原理,这使得希望使用Unix/Linux平台架设BT服务器,并提供“种子”下载的管理员们无从下手。本文从应用者角度讨论BT原理,并详细说明如 何在Unix/Linux平台下架设一台BT服务器,并提供“种子”下载服务。

    BT原理

    BT是BitTorrent(比特流)的简称,BT的特点是用户下载的同时,也在为其它用户提供上传,所以不会像FTP服务器那样随着用户数的增加而导致下载速度降低。恰恰相反,对于BT下载而言,下载的人越多速度越快。 

     


    传统的文件共享服务,如FTP、HTTP等工作原理如图1所示。这种方式随着用户数的增多,对带宽的要求也随之增多,用户过多就会造成瓶颈,所以很多下载网站都有并发用户数的限制及下载速度的限制等。

    而BT下载采用一种共享的方式来传输文件,其工作原理如图2所示。

    BT下载首先在第一个共享端(或称为Downloader)把一个文件分成N个部分,A用户可以从Downloader上随机下载第M个部分,B用户可以 在Downloader服务器随机下载第K个部分。而A用户的BT客户端下载程序会根据情况从B用户下载第K个部分,同样的,B用户也可以从A用户下载第 M个部分,通过这种方式减轻服务器端负荷,加快用户的下载速度。例如,C用户直接从服务器下载,速度可能只有几Kbps,而从A、B用户处下载,速度将快很多。用户在下载的同时,也在上传文件,在享受别人提供下载服务 的同时,每个用户也同时在上载并贡献自己的带宽,所以造成使用BT下载服务的人越多,大家的速度就越快。BT下载的优越性就在这里体现。

    从构建BT服务器的角度来看,整个BT系统由四个部分组成。

    1.BT客户端

    BT客户端是安装在用户PC机上的客户端软件,目前有很多BT客户端可用,这里推荐BitComet(http://www.bitcomet.com/index-zh.htm)。它是一个类似FlashGet界面的BT下载客户端软件,简洁易用。

    BitComet在下载的同时,还负责将下载的内容共享给其它用户,这个过程完全不需要用户参与。如果不知道如何使用BT客户端下载,那么安装BitComet后去访问BT中国网站,试一试就知道如何使用了。

    2.BT“种子”文件

    BT“种子”文件是一个名为.torrent的文件,它是由第一个发布共享文件者根据源文件制作出来的源文件的指纹信息。“种子”文件很小,一般在几十 KB到几百KB之间,其中包含文件所在的BT端地址信息及目标文件的校验码。当BT用户获得“种子”后,直接在BT客户端软件中运行“种子”文件,BT软 件将根据“种子”文件包含的信息,自动查找到该文件所有可用的下载源,并进行下载。

    3.Tracker

    使用BT服务不需要指定服务器,虽然在BT服务里面仍然有服务器的概念,但使用BT服务的人并不需要关心服务器在哪里。BT服务器称为Tracker,准 确地说,Tracker是指运行于服务器上的一个程序,这个程序能够追踪到底有多少人同时在下载同一个文件。BT客户端连接上Tracker服务器,就会 获得一个下载人员的名单,根据这个名单,BT客户端会自动连接网络中其它节点进行下载。

    4.种子

    BT服务把提供完整文件的用户节点称为“种子”(Seed),正在下载的用户称为客户(Client)。某一个文件现在有多少“种子”、多少“客户”是可以看到的。只要有一个“种子”就可以放心地下载。当然,种子越多、客户越多的文件下载的速度会越快。

    如果发现“种子”数为0,那么就不需要去尝试了。当某个用户下载完成后,如没有选择关闭,其它人就可以从该用户处继续下载文件。所以当下载的人多起来,通常做“种子”的人也会随之增加,下载速度也会加快。

    二、配置安装

    安装前先确定我们已经安装了能够解析html的中间件。如apache,nginx都可以

    1.下载BT

    BitTorrent是一个开源免费软件,它使用Python语言编写。Python是一种脚本语言,这意味着BitTorrent具有出色的跨平台特 性。用户不仅可以在Windows中使用BT,也可以方便地在Linux/Unix平台下使用。BitTorrent的官方网站地址为http: //sourceforge.NET/projects/bittorrent/,当前最新版本为3.4.2。

    2.安装BT

    在安装BitTorrent以前,首先要确保系统已经安装有Python版本:

    # rpm -qa|grep python
    python-2.2.2-26

    若系统没有安装Python,则需要从rpmfind.Net下载Python,并加以安装。下载得到BitTorrent-3.4.2.tar.gz以后,将其解压缩:

    # tar xvfz BitTorrent-3.4.2.tar.gz

    然后安装BitTorrent:

    # python setup.py install

    安装完毕以后,BitTorrent软件包的命令工具均安装在/usr/loca/bin目录下。

    3.配置、启动BT

    前面提到,BT系统的核心是Tracker,因此架设一台BT服务器的第一步就是要启动一个Tracker:

    # /usr/local/bin/ bttrack.py --port 6969 --dfile dstate >/dev/null 2>&1 &

    这样便在后台启动了一个Tracker供自己使用。

    第二步,需要对希望提供下载的文件制作“种子”,这里假设对文件/btdata/dahuaxiyou.avi制作“种子”:

    # btmakemetafile.py /btdata/dahuaxiyou.avi http://www.mydomain.com:6969/announce

    该命令对/btdata/dahuaxiyou.avi文件制作“种子”,“种子”名为 dahuaxiyou.avi.torrent,其中www.mydomain.com是Linux服务器的域名。而btmakemetafile.py 也可以对目录制作“种子”,命令与对文件制作“种子”完全一样。

    第三步,需要配置Web服务器,将.torrent文件和application/x-bittorrent相关联。编辑Apache的配置文件httpd.conf,添加如下内容:

    AddType application/x-bittorrent .torrent

    然后重新启动Web服务器,并将刚刚制作的“种子”放置在Web服务器的文档目录中,让用户可以访问。

    最后一步,启动一个Downloader(最原始的共享源),使以后的用户可以获得最初的拷贝:

    # btdownloadheadless.py --url http://
    www.mydomain.com/dahuaxiyou.avi.torrent --saveas dahuaxiyou.avi

    其中http: //www.mydomain.com/dahuaxiyou.avi.torrent为制作“种子”的URL地址。这样,用户通过Web访问 dahuaxiyou.avi.torrent就能实现Web下载文件。但需要注意,提供用户访问的“种子” dahuaxiyou.avi.torrent应该跟原始文件存放在同一个目录下,也就是http: //www.mydomain.com/dahuaxiyou.avi.torrent所在目录应该存有原始文件或到原始文件的链接,否则 Downloader会自动拷贝一份源文件到“种子”所在目录下。



    展开全文
  • BitTorrent BT服务器

    千次阅读 2011-11-24 17:26:18
     传统的文件下载服务都是基于客户端/服务器模型,被下载的文件放在服务器上,用户登录服务器,将该文件下载到本地。在文件下载的过程中,被传输文件的来源和目的端并不对等,服务器只是单向地将文件传送给客户端。 ...

    BitTorrent介绍:

            传统的文件下载服务都是基于客户端/服务器模型,被下载的文件放在服务器上,用户登录服务器,将该文件下载到本地。在文件下载的过程中,被传输文件的来源和目的端并不对等,服务器只是单向地将文件传送给客户端。
      这种传统软件下载模式的缺点是显而易见的,整个系统的瓶颈位于服务器。由于受到服务器处理能力、互联网接入链路带宽等多种环境的制约,当下载量非常大时,服务器往往不堪重负。而用户下载完毕后就和服务器没有任何联系,其它用户也无法从以前用户下载的版本得到任何帮助。
      随着互联网技术的不断发展,P2P(Peer To Peer,点到点)技术逐渐成为文件交换和下载的成熟技术。P2P技术将互联网“自由、平等、互助、共享”的精神发扬光大。
      最早的P2P技术是音乐交换软件Napster,目前最流行的P2P文件交换技术则是BT(BitTorrent,比特流)。
      BT是BitTorrent(比特流)的简称,BT的特点是用户下载的同时,也在为其它用户提供上传,所以不会像FTP/HTTP服务器那样随着用户数的增加而导致下载速度降低。恰恰相反,对于BT下载而言,下载的人越多速度越快。


    传统文件下载:


            传统的文件共享服务,如FTP、HTTP等工作原理如上图所示。这种方式随着用户数的增多,对带宽的要求也随之增多,用户过多就会造成瓶颈,所以很多下载网都有并发用户数的限制及下载速度的限制等。


    BT下载:




                     BT下载首先在第一个共享端(或称为Downloader)把一个文件分成N个部分,A用户可以从Downloader上随机下载第M个部分,B用户可以在Downloader服务器随机下载第K个部分。而A用户的BT客户端下载程序会根据情况从B用户下载第K个部分,同样的,B用户也可以从A用户下载第M个部分,通过这种方式减轻服务器端负荷,加快用户的下载速度。
       例如,C用户直接从服务器下载,速度可能只有几Kbps,而从A、B用户处下载,速度将快很多。用户在下载的同时,也在上传文件,在享受别人提供下载服务的同时,每个用户也同时在上载并贡献自己的带宽,所以造成使用BT下载服务的人越多,大家的速度就越快。BT下载的优越性就在这里体现.


    从构建BT服务器的角度来看,整个BT系统由四个部分组成:

              1.BT客户端
       BT客户端是安装在用户PC机上的客户端软件,目前有很多BT客户端可用,如迅雷.BitComet  
    2.BT“种子”文件
       BT“种子”文件是一个名为.torrent的文件,它是由第一个发布共享文件者根据源文件制作出来的源文件的指纹信息。“种子”文件很小,一般在几十KB到几百KB之间,其中包含文件所在的BT端地址信息及目标文件的校验码。当BT用户获得“种子”后,直接在BT客户端软件中运行“种子”文件,BT软件将根据“种子”文件包含的信息,自动查找到该文件所有可用的下载源,并进行下载。
    3.Tracker
       使用BT服务不需要指定服务器,虽然在BT服务里面仍然有服务器的概念,但使用BT服务的人并不需要关心服务器在哪里。BT服务器称为Tracker,准确地说,Tracker是指运行于服务器上的一个程序,这个程序能够追踪到底有多少人同时在下载同一个文件。BT客户端连接上Tracker服务器,就会获得一个下载人员的名单,根据这个名单,BT客户端会自动连接网络中其它节点进行下载。
    4.种子
       BT服务把提供完整文件的用户节点称为“种子”(Seed),正在下载的用户称为客户(Client)。某一个文件现在有多少“种子”、多少“客户”是可以看到的。只要有一个“种子”就可以放心地下载。当然,种子越多、客户越多的文件下载的速度会越快。
      如果发现“种子”数为0,那么就不需要去尝试了。当某个用户下载完成后,如没有选择关闭,其它人就可以从该用户处继续下载文件。所以当下载的人多起来,通常做“种子”的人也会随之增加,下载速度也会加快。


    安装:

    1.下载BT
       BitTorrent是一个开源免费软件,它使用Python语言编写。这意味着BitTorrent具有出色的跨平台特性。用户不仅可以在Windows中使用BT,也可以方便地在Linux/Unix平台下使用。 下载地址:http://download.bittorrent.com/dl/archive/BitTorrent-3.9.1.tar.gz 

    2.安装BT
    在安装BitTorrent以前,首先要确保系统已经安装有Python:
    安装Python

    # cd /usr/local/src/tarbag/
    # wget http://downloads.activestate.com/ActivePython/releases/2.7.0.2/ActivePython-2.7.0.2-linux-x86_64.tar.gz
    # tar -zxvf ActivePython-2.7.0.2-linux-x86_64.tar.gz -C ../software/
    # cd ../software/ActivePython-2.7.0.2-linux-x86_64/
    # ./install.sh 
    	Enter directory in which to install ActivePython. Leave blank and press 'Enter' to use the default [/opt/ActivePython-2.7].
    	Install directory: /usr/local/python
    	()
    	Installing ActivePython to '/usr/local/python'...
    	Relocating dir-dependent files...
    	Pre-compiling .py files in the standard library...
    
    	ActivePython has been successfully installed to:
    
        	/usr/local/python
    
    # ls /usr/local/python/
    bin doc include lib share
    再把python的路径写入PATH

    # env |grep PATH
    PATH=/usr/lib64/qt.3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/python/bin
    安装BT Tracker
    #cd /usr/local/src/tarbag/
    #wget http://download.bittorrent.com/dl/archive/BitTorrent-3.9.1.tar.gz 
    #tar -zxvf BitTorrent-3.9.1.tar.gz -C ../software 
    #cd ../software/BitTorrent-3.9.1 
    #python setup.py install  //(安装) 
    安装完后bt的所有工具都在/usr/local/python/bin/下面

    # ls /usr/local/python/bin/bt*
    /usr/local/python/bin/btdownloadcurses.py    /usr/local/python/bin/btlaunchmany.py      /usr/local/python/bin/btrename.py
    /usr/local/python/bin/btdownloadgui.py       /usr/local/python/bin/btmaketorrentgui.py /usr/local/python/bin/btshowmetainfo.py
    /usr/local/python/bin/btdownloadheadless.py /usr/local/python/bin/btmaketorrent.py     /usr/local/python/bin/bttest.py
    /usr/local/python/bin/btlaunchmanycurses.py /usr/local/python/bin/btreannounce.py      /usr/local/python/bin/bttrack.py
    3.启动BT服务
    第一步,BT系统的核心是Tracker,因此架设一台BT服务器的第一步就是要启动一个Tracker:
    #/usr/local/python/bin/python2.7 /usr/local/python/bin/bttrack.py --port 6969 --dfile /vat/log/bttrack.log&  
    # ps -ef |grep python  

    # netstat -lntp |grep 6969

    启动成功后.可以通过web查看一些关于种子的信息.

    因为现在只启动了tracker服务.还没有种子.所以  not tracking any files yet...

            第二步,需要对希望提供下载的文件制作“种子”,btmakemetafile.py可以对文件也可以对目录制作“种子”。

    #/usr/local/python/bin/btmaketorrent.py   http://localhost:6969/announce  /www/btftp/文件名		
    #/usr/local/python/bin/btmaketorrent.py   http://localhost:6969/annouce /www/目录名
    例子:
    #/usr/local/python/bin/btmaketorrent.py   http://localhost:6969/announce  /www/btftp/zlib-1.2.3.tar.gz

            该命令对/www/btftp/zlib-1.2.3.tar.gz文件制作“种子”,“种子”名为zlib-1.2.3.tar.gz.torrent.

    第三步,需要配置Web服务器,将.torrent文件和application/x-bittorrent相关联。编辑Apache的配置文件httpd.conf,添加如下内容:

    AddType application/x-bittorrent .torrent
    
    

            然后重新启动Web服务器,并将刚刚制作的“种子”放置在Web服务器的提供下载的目录中,让用户可以访问。         

    最后一步,启动一个Downloader(最原始的共享源),使以后的用户可以获得最初的拷贝:

    # btdownloadheadless.py /www/btseed/zlib-1.2.3.tar.gz.torrent  --save_as /www/btftp/zlib-1.2.3.tar.gz  

    作为BT服务器.目标是共享更多的文件给用户下载,如果对于每个“种子”都要启动一个Downloader,不但非常烦琐,可能还会大大影响服务器效率。

    为了解决这个问题,BitTorrent提供了另外两个Downloader程序btlaunchmany.py和btlaunchmanycurses.py。这两个程序会定时检查指定目录,对其中的所有“种子”启动Downloader,并根据目录内容增加和删除Downloader。

    btlaunchmanycurses.py是一个图形控制台界面,而btlaunchmany.py则更适合于后台运行程序。
    btlaunchmanycurses.py需要图形界面.还需要给下载频道负责人服务器的权限.所以我们使用btlaunchmany.py后台运行程序.
    用法如下:

    #/usr/local/python/bin/btlaunchmany.py   --data_dir /源目录   --torrent_dir /种子目录
             启动后.btlaunchmany.py使用6881端口.默认每隔120秒到种子目录探测一次.

    下载测试:

    现在这个种子已经做好.并且已经发布可以下载.



    以下是我以前公司使用的BT的一些相关内容,留个底下:

    服务器IP:220.*.*.*

    [root@www www]# ls
    btftp    btseed     download   wget

    btftp:源目录

    btseed:发布的种子目录(Web提供下载的工作目录)

    download:从官网下载资源存放的目录

    wget:上传wget.txt、 上传资源的目录

    [root@www wget]# ls
    error.txt   ftp   wget.txt

    ftp目录是挂载btftp


    相关脚本:    

    btstart.sh: 启动BT服务/btlaunchmany.py后台进程  
    #functions:Start BT server  --20101022---
    #!/bin/bash
    cd /usr/bin;python bttrack.py --port 6969 --dfile /var/log/bttrack.log > /dev/null 2>&1  & 
    /usr/bin/btlaunchmany.py   --data_dir /www/btftp/ --torrent_dir /www/btseed/  > /dev/null 2>&1  &

    需要注意,提供用户访问的“种子” * .torrent应该跟原始文件存放在同一个目录下,也就是Web服务器提供下载的目录里除了*.torrnet文件还应该存有原始文件或到原始文件的链接(硬链接,软链接经测试无法提供下载),否则Downloader会自动拷贝一份源文件到“种子”所在目录下。

    btseed.sh: 制作种子  
    #functions:Make torrent and mv  torrent!   ---20101021---
    basedir=/www/btftp/
    seeddir=/www/btseed/
    ftp=`ls $basedir | grep -v index.html | grep -v resume  | grep -v metainfl > /tmp/1.txt`
    number=`cat /tmp/1.txt |wc -l`
    	for (( i=1; i<=$number; i=i+1 ))
    	do
    	        file=`sed -n "$i"p /tmp/1.txt`
    	        if [ ! -f "$seeddir$file.torrent" ] ;then
    	                btmaketorrent.py  http://220.162.237.140:6969/announce $basedir$file
    	                ln $basedir$file $seeddir
    	                mv $basedir$file.torrent $seeddir
    	        fi
    	done
    btwget.sh: 从官方网站下载资源
    #author:hushuangfeng
    #function:Wget files and  mv to /www/btftp   ---20100430---
    #!/bin/bash
    export LANG=zh_CN.UTF-8
    cut -d "[" -f 1  /www/wget/wget.txt > /tmp/wget.txt
    number=`cat /tmp/wget.txt |wc -l`
    	for (( i=1; i<=$number; i=i+1 ))
    		do
            	file=`cat /tmp/wget.txt  | awk -F / '{print $NF}' | sed -n "$i"p`
            	url=`sed -n "$i"p /tmp/wget.txt`
           		 if [  !  -f /www/btftp/$file ] ;then
          		wget -P /www/download $url > /dev/null 2>/www/wget/error.txt  && mv /www/download/$file  /www/btftp                		 
    			fi
    		echo " " > /www/wget/wget.txt && rm -rf /tmp/wget.txt
    
    	done
    #cat /etc/rc.local
    /usr/local/scripts/btstart.sh 
    # crontab -l
    */30 * * * *  /usr/local/scripts/btseed.sh 
    00 1 * * * /usr/local/scripts/btwget.sh 

    展开全文
  • 架构 BitTorrent BT服务器

    千次阅读 2014-08-11 16:36:08
     传统的文件下载服务都是基于客户端/服务器模型,被下载的文件放在服务器上,用户登录服务器,将该文件下载到本地。在文件下载的过程中,被传输文件的来源和目的端并不对等,服务器只是单向地将文件传送给客户端。 ...

    BitTorrent介绍:

            传统的文件下载服务都是基于客户端/服务器模型,被下载的文件放在服务器上,用户登录服务器,将该文件下载到本地。在文件下载的过程中,被传输文件的来源和目的端并不对等,服务器只是单向地将文件传送给客户端。
      这种传统软件下载模式的缺点是显而易见的,整个系统的瓶颈位于服务器。由于受到服务器处理能力、互联网接入链路带宽等多种环境的制约,当下载量非常大时,服务器往往不堪重负。而用户下载完毕后就和服务器没有任何联系,其它用户也无法从以前用户下载的版本得到任何帮助。
      随着互联网技术的不断发展,P2P(Peer To Peer,点到点)技术逐渐成为文件交换和下载的成熟技术。P2P技术将互联网“自由、平等、互助、共享”的精神发扬光大。
      最早的P2P技术是音乐交换软件Napster,目前最流行的P2P文件交换技术则是BT(BitTorrent,比特流)。
      BT是BitTorrent(比特流)的简称,BT的特点是用户下载的同时,也在为其它用户提供上传,所以不会像FTP/HTTP服务器那样随着用户数的增加而导致下载速度降低。恰恰相反,对于BT下载而言,下载的人越多速度越快。


    传统文件下载:


            传统的文件共享服务,如FTP、HTTP等工作原理如上图所示。这种方式随着用户数的增多,对带宽的要求也随之增多,用户过多就会造成瓶颈,所以很多下载网都有并发用户数的限制及下载速度的限制等。


    BT下载:




                     BT下载首先在第一个共享端(或称为Downloader)把一个文件分成N个部分,A用户可以从Downloader上随机下载第M个部分,B用户可以在Downloader服务器随机下载第K个部分。而A用户的BT客户端下载程序会根据情况从B用户下载第K个部分,同样的,B用户也可以从A用户下载第M个部分,通过这种方式减轻服务器端负荷,加快用户的下载速度。
       例如,C用户直接从服务器下载,速度可能只有几Kbps,而从A、B用户处下载,速度将快很多。用户在下载的同时,也在上传文件,在享受别人提供下载服务的同时,每个用户也同时在上载并贡献自己的带宽,所以造成使用BT下载服务的人越多,大家的速度就越快。BT下载的优越性就在这里体现.


    从构建BT服务器的角度来看,整个BT系统由四个部分组成:

              1.BT客户端
       BT客户端是安装在用户PC机上的客户端软件,目前有很多BT客户端可用,如迅雷.BitComet  
    2.BT“种子”文件
       BT“种子”文件是一个名为.torrent的文件,它是由第一个发布共享文件者根据源文件制作出来的源文件的指纹信息。“种子”文件很小,一般在几十KB到几百KB之间,其中包含文件所在的BT端地址信息及目标文件的校验码。当BT用户获得“种子”后,直接在BT客户端软件中运行“种子”文件,BT软件将根据“种子”文件包含的信息,自动查找到该文件所有可用的下载源,并进行下载。
    3.Tracker
       使用BT服务不需要指定服务器,虽然在BT服务里面仍然有服务器的概念,但使用BT服务的人并不需要关心服务器在哪里。BT服务器称为Tracker,准确地说,Tracker是指运行于服务器上的一个程序,这个程序能够追踪到底有多少人同时在下载同一个文件。BT客户端连接上Tracker服务器,就会获得一个下载人员的名单,根据这个名单,BT客户端会自动连接网络中其它节点进行下载。
    4.种子
       BT服务把提供完整文件的用户节点称为“种子”(Seed),正在下载的用户称为客户(Client)。某一个文件现在有多少“种子”、多少“客户”是可以看到的。只要有一个“种子”就可以放心地下载。当然,种子越多、客户越多的文件下载的速度会越快。
      如果发现“种子”数为0,那么就不需要去尝试了。当某个用户下载完成后,如没有选择关闭,其它人就可以从该用户处继续下载文件。所以当下载的人多起来,通常做“种子”的人也会随之增加,下载速度也会加快。


    安装:

    1.下载BT
       BitTorrent是一个开源免费软件,它使用Python语言编写。这意味着BitTorrent具有出色的跨平台特性。用户不仅可以在Windows中使用BT,也可以方便地在Linux/Unix平台下使用。 下载地址:http://download.bittorrent.com/dl/archive/BitTorrent-3.9.1.tar.gz 

    2.安装BT
    在安装BitTorrent以前,首先要确保系统已经安装有Python:
    安装Python

    1. # cd /usr/local/src/tarbag/  
    2. # wget http://downloads.activestate.com/ActivePython/releases/2.7.0.2/ActivePython-2.7.0.2-linux-x86_64.tar.gz  
    3. # tar -zxvf ActivePython-2.7.0.2-linux-x86_64.tar.gz -C ../software/  
    4. # cd ../software/ActivePython-2.7.0.2-linux-x86_64/  
    5. # ./install.sh   
    6.     Enter directory in which to install ActivePython. Leave blank and press 'Enter' to use the default [/opt/ActivePython-2.7].  
    7.     Install directory: /usr/local/python  
    8.     ()  
    9.     Installing ActivePython to '/usr/local/python'...  
    10.     Relocating dir-dependent files...  
    11.     Pre-compiling .py files in the standard library...  
    12.   
    13.     ActivePython has been successfully installed to:  
    14.   
    15.         /usr/local/python  
    16.   
    17. # ls /usr/local/python/  
    18. bin doc include lib share  
    再把python的路径写入PATH
    1. # env |grep PATH  
    2. PATH=/usr/lib64/qt.3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/python/bin  
    安装BT Tracker
    1. #cd /usr/local/src/tarbag/  
    2. #wget http://download.bittorrent.com/dl/archive/BitTorrent-3.9.1.tar.gz   
    3. #tar -zxvf BitTorrent-3.9.1.tar.gz -C ../software   
    4. #cd ../software/BitTorrent-3.9.1   
    5. #python setup.py install  //(安装)   
    安装完后bt的所有工具都在/usr/local/python/bin/下面
    1. # ls /usr/local/python/bin/bt*  
    2. /usr/local/python/bin/btdownloadcurses.py    /usr/local/python/bin/btlaunchmany.py      /usr/local/python/bin/btrename.py  
    3. /usr/local/python/bin/btdownloadgui.py       /usr/local/python/bin/btmaketorrentgui.py /usr/local/python/bin/btshowmetainfo.py  
    4. /usr/local/python/bin/btdownloadheadless.py /usr/local/python/bin/btmaketorrent.py     /usr/local/python/bin/bttest.py  
    5. /usr/local/python/bin/btlaunchmanycurses.py /usr/local/python/bin/btreannounce.py      /usr/local/python/bin/bttrack.py  
    3.启动BT服务
    第一步,BT系统的核心是Tracker,因此架设一台BT服务器的第一步就是要启动一个Tracker:
    1. #/usr/local/python/bin/python2.7 /usr/local/python/bin/bttrack.py --port 6969 --dfile /vat/log/bttrack.log&    
    2. # ps -ef |grep python    

    1. # netstat -lntp |grep 6969  

    启动成功后.可以通过web查看一些关于种子的信息.

    因为现在只启动了tracker服务.还没有种子.所以  not tracking any files yet...

            第二步,需要对希望提供下载的文件制作“种子”,btmakemetafile.py可以对文件也可以对目录制作“种子”。

    1. #/usr/local/python/bin/btmaketorrent.py   http://localhost:6969/announce  /www/btftp/文件名          
    2. #/usr/local/python/bin/btmaketorrent.py   http://localhost:6969/annouce /www/目录名  
    3. 例子:  
    4. #/usr/local/python/bin/btmaketorrent.py   http://localhost:6969/announce  /www/btftp/zlib-1.2.3.tar.gz  

            该命令对/www/btftp/zlib-1.2.3.tar.gz文件制作“种子”,“种子”名为zlib-1.2.3.tar.gz.torrent.

    第三步,需要配置Web服务器,将.torrent文件和application/x-bittorrent相关联。编辑Apache的配置文件httpd.conf,添加如下内容:

    1. AddType application/x-bittorrent .torrent  

            然后重新启动Web服务器,并将刚刚制作的“种子”放置在Web服务器的提供下载的目录中,让用户可以访问。         

    最后一步,启动一个Downloader(最原始的共享源),使以后的用户可以获得最初的拷贝:

    1. # btdownloadheadless.py /www/btseed/zlib-1.2.3.tar.gz.torrent  --save_as /www/btftp/zlib-1.2.3.tar.gz    

    作为BT服务器.目标是共享更多的文件给用户下载,如果对于每个“种子”都要启动一个Downloader,不但非常烦琐,可能还会大大影响服务器效率。

    为了解决这个问题,BitTorrent提供了另外两个Downloader程序btlaunchmany.py和btlaunchmanycurses.py。这两个程序会定时检查指定目录,对其中的所有“种子”启动Downloader,并根据目录内容增加和删除Downloader。

    btlaunchmanycurses.py是一个图形控制台界面,而btlaunchmany.py则更适合于后台运行程序。
    btlaunchmanycurses.py需要图形界面.还需要给下载频道负责人服务器的权限.所以我们使用btlaunchmany.py后台运行程序.
    用法如下:
    1. #/usr/local/python/bin/btlaunchmany.py   --data_dir /源目录   --torrent_dir /种子目录  
             启动后.btlaunchmany.py使用6881端口.默认每隔120秒到种子目录探测一次.

    下载测试:

    现在这个种子已经做好.并且已经发布可以下载.



    以下是我以前公司使用的BT的一些相关内容,留个底下:

    服务器IP:220.*.*.*

    1. [root@www www]# ls  
    2. btftp    btseed     download   wget  

    btftp:源目录

    btseed:发布的种子目录(Web提供下载的工作目录)

    download:从官网下载资源存放的目录

    wget:上传wget.txt、 上传资源的目录

    1. [root@www wget]# ls  
    2. error.txt   ftp   wget.txt  

    ftp目录是挂载btftp


    相关脚本:    

    1. btstart.sh: 启动BT服务/btlaunchmany.py后台进程    
    2. #functions:Start BT server  --20101022---  
    3. #!/bin/bash  
    4. cd /usr/bin;python bttrack.py --port 6969 --dfile /var/log/bttrack.log > /dev/null 2>&1  &   
    5. /usr/bin/btlaunchmany.py   --data_dir /www/btftp/ --torrent_dir /www/btseed/  > /dev/null 2>&1  &  

    需要注意,提供用户访问的“种子” * .torrent应该跟原始文件存放在同一个目录下,也就是Web服务器提供下载的目录里除了*.torrnet文件还应该存有原始文件或到原始文件的链接(硬链接,软链接经测试无法提供下载),否则Downloader会自动拷贝一份源文件到“种子”所在目录下。

    1. btseed.sh: 制作种子    
    2. #functions:Make torrent and mv  torrent!   ---20101021---  
    3. basedir=/www/btftp/  
    4. seeddir=/www/btseed/  
    5. ftp=`ls $basedir | grep -v index.html | grep -v resume  | grep -v metainfl > /tmp/1.txt`  
    6. number=`cat /tmp/1.txt |wc -l`  
    7.     for (( i=1; i<=$number; i=i+1 ))  
    8.     do  
    9.             file=`sed -n "$i"p /tmp/1.txt`  
    10.             if [ ! -f "$seeddir$file.torrent" ] ;then  
    11.                     btmaketorrent.py  http://220.162.237.140:6969/announce $basedir$file  
    12.                     ln $basedir$file $seeddir  
    13.                     mv $basedir$file.torrent $seeddir  
    14.             fi  
    15.     done  
    1. btwget.sh: 从官方网站下载资源  
    2. #author:hushuangfeng  
    3. #function:Wget files and  mv to /www/btftp   ---20100430---  
    4. #!/bin/bash  
    5. export LANG=zh_CN.UTF-8  
    6. cut -d "[" -f 1  /www/wget/wget.txt > /tmp/wget.txt  
    7. number=`cat /tmp/wget.txt |wc -l`  
    8.     for (( i=1; i<=$number; i=i+1 ))  
    9.         do  
    10.             file=`cat /tmp/wget.txt  | awk -F / '{print $NF}' | sed -n "$i"p`  
    11.             url=`sed -n "$i"p /tmp/wget.txt`  
    12.              if [  !  -f /www/btftp/$file ] ;then  
    13.             wget -P /www/download $url > /dev/null 2>/www/wget/error.txt  && mv /www/download/$file  /www/btftp                          
    14.             fi  
    15.         echo " " > /www/wget/wget.txt && rm -rf /tmp/wget.txt  
    16.   
    17.     done  
    1. #cat /etc/rc.local  
    2. /usr/local/scripts/btstart.sh   
    3. # crontab -l  
    4. */30 * * * *  /usr/local/scripts/btseed.sh   
    5. 00 1 * * * /usr/local/scripts/btwget.sh   

    转载自:http://blog.csdn.net/deccmtd/article/details/5432495

    展开全文
  • p2p通信原理及实现

    万次阅读 多人点赞 2017-01-04 13:41:09
    1.简介  当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信。这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还有其他中间件如...
  • Linux下搭建BT服务器

    千次阅读 2017-02-16 09:31:31
    P2P(Peer to Peer 即对等网络)就是在这种背景下提出的一种网络技术,P2P可以简单地定义为通过直接交换信息,共享计算机资源和服务,对等计算机兼有客户机和服务器的功能。在这种网络中所有的节点是对等的(称为...
  • XML-RPC实现简单的P2P文件共享 先来个百度百科:  XML-RPC的全称是XML Remote Procedure Call,即XML(标准通用标记语言下的一个子集)远程过程调用。它是一套允许运行在不同操作系统、不同环境的程序实现基于...
  • Linux下的P2P协议主要包括:BitTorrent、aMule、Gnutella等。本文在Redhat Enterprise Linux Advanced Server 4环境下,介绍构建P2P服务的方法。随着宽带网的盛行,传统的HTTP 和FTP这种一点对多点的下载方式已经...
  • 但用BT的时候,发现它可以让内网用户做 Send,作为程序员就忍不住下载了它的源代码分析了一把(为了看它,还专门去写了一下Python:})比起其它的P2P软件,BT有个独特的地方,它存在一个中间的WEB服务器,就是我们在发布的时...
  • WTF_Daily_Blog

    千次阅读 2017-10-25 18:57:09
    徒步中的程序猿-重庆出发 TensorFlow练习27: 验证码生成器-从文本生成图像 从2D图片生成3D模型(3D-GAN) TensorFlow练习26: AI操盘手 随机器学习兴起的Julia编程语言 TensorFlow练习25: 使用深度学习做阅读...
  • P2P四种网络模型

    千次阅读 2010-08-09 20:39:00
    用于共享MP3音乐文件的Napster是其中最典型的代表。其用户注册与文件检索过程类似于传统的C/S模式,区别在于所有资料并非存储在服务器上,而是存贮在各个节点中。这种网络结构显示了P2P系统信息量巨大的优势和吸引力...
  • 突破传统:Linux下如何架设BT服务器

    千次阅读 2006-12-08 09:53:00
    传统的文件下载服务都是基于客户机/服务器模型,被下载的文件放在服务器上,用户登录服务器,将该文件下载到本地。在文件下载的过程中,被传输文件的来源和目的端并不对等,服务器只是单向地将文件传送给客户端。 ...
  • 开源p2p直播平台

    千次阅读 2015-07-05 19:47:36
    P2P流媒体开源项目介绍 1. PeerCast 2002年成立,最早的开源P2P流媒体项目。PeerCast把节点按树结构组织起来, 每个频道都是一个树, 直播源是根节点,父节点只给子节点提供数据。节点离根节点越远,传输时延就越...
  • P2P中DHT网络介绍

    万次阅读 2012-09-17 20:58:55
    基于P2P技术的应用有很多,包括文件分享,即时通信,协同处理,流媒体通信等等。通过这些应用的接触,分析和理解,P2P其本质是一种新的网络传播技术,这种新的传播技术打破了传统的C/S架构,逐步
  • linux下的bt工具bitorrent

    千次阅读 2006-03-21 00:40:00
    linux下的bt工具很少,而且性能也都不怎么高,azureus虽然是图形界面的,但是很占内存和cup,...bittorent是一个基于 客户端/服务器的 p2p文件传输工具,bittorrent可以分发大规模的数据,例如ISO光盘镜像,他可以
  • Python 这个名字的灵感来自于英国喜剧团体 Monty Python,它的开发团队有一个重要的基础目标,就是使语言使用起来很有趣。Python 易于设置,并且是用相对直接的风格来编写,对错误会提供即时反馈,对初学者而言是个...
  • 在这个信息时代高速发展的情况下,很多人会对自己该往哪个方向发展感到迷茫,下面我就浅显的给大家介绍一下五大流行区域的发展前景。大数据的发展前景:当前大数据行业真的是人才稀缺吗?学了几年后,大数据行业会...
  • 码农周刊分类整理

    万次阅读 2017-02-27 20:41:59
    码农周刊的类别分的比较大,不易于后期查阅,所以我把每期的内容按语言或技术进行了分类整理。 ... 一些不熟悉的领域分类可能不准确,请见谅 ...编程之外栏目里的文章和技术无直接关系,移到了talks.md文件里。 readme.
1 2 3 4 5 ... 20
收藏数 3,317
精华内容 1,326
关键字:

p2p文件共享实现 python