在Linux环境下构建P2P下载服务的方法教程

本文涉及的产品
云防火墙,500元 1000GB
简介: Linux下的P2P协议主要包括:BitTorrent、aMule、Gnutella等。本文在Redhat Enterprise Linux Advanced Server 4环境下,介绍构建P2P服务的方法。

Linux下的P2P协议主要包括:BitTorrent、aMule、Gnutella等。本文在Redhat Enterprise Linux Advanced Server 4环境下,介绍构建P2P服务的方法。

随着宽带网的盛行,传统的HTTP 和FTP这种一点对多点的下载方式已经满足不了大家的需求了。它会随着下载人数增加而出现连接不上和速度骤减的现象。而P2P 技术则打破常规格式,极大地节省了网络带宽。可使你直接连接其他用户的计算机,交换和搜索文件,而不用再通过网页浏览与下载,最大限度地利用了网络带宽。它可使大家在互联网上共享到平时用普通方式难以接触到的各种各样海量的资源。使用P2P软件的每一台PC 都是客户机在下载资源,也是服务器在上传文件,在索取的同时也给予。

BitTorrent是一个多点下载的开放源码的P2P软件,使用非常方便。是一个多点下载的共享文件软件,由于在下载的同时,也可为其他用户提供上传,所以不会随着用户人数的增加而降低下载速度,因此,下载的人越多,速度便越快。现在不少大公司如RedHat,都有使用 BT 让他们的客户下载开发版本。

架设BitTorrent服务器

BitTorrent使用Python语言编写,是一个开放源代码软件,既可以在Windwos下运行,也可以在Linux环境下运行。BitTorrent的官方网址是:http://bitconjurer.org/BitTorrent/ 。最新版本是:4.0.2-1。安装BitTorrent前使用命令:“rpm -qa|grep Python”检查是否配置了Python语言。否则需要到其官方网站http://www.python.org 下载安装。

1. 下载安装软件

#wget http://www.bittorrent.com/dl/BitTorrent-4.0.2-1.noarch.rpm

#rpm -ivh BitTorrent-4.0.2-1.noarch.rpm

安装完成后所有BitTorrent命令和工具都安装在/usr/bin目录下。包括:btmaketorrent.py(制作种子工具)、bttest.py(测试种子工具)、bttrack.py(制作Tracker工具)、btdownloadheadless.py(制作共享源工具)、btlaunchmany.py(后台启动共享源工具)、btshowmetainfo.py(查看下载情况工具)、btdownloadgui.py(图形化制作共享源工具)、btmaketorrent.py(图形化制作种子工具)。

2.配置、启动BitTorrent

BitTorrent的核心是Tracker,BitTorrent服务不需要服务器,但是BitTorrent服务中仍然有服务器的概念,这里称作Tracker。准确地说,Tracker是指运行的服务器上的一个程序,这个程序可以跟踪多少人同时在下载同一个文件。BT客户端连接到Tracker时会产生一个下载人员名单,根据这个名单,BT客户端会自动连接网络中其他节点进行下载。所以第一步要启动一个Tracker:

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

推荐使用普通用户权限来启动这个服务,这样更加安全。这个命令会在当前目录生成一个dstate的文件,并打开6969端口 。

3.制作种子(Seed)

BT服务器的track服务并不提供下载服务,提供下载的是它的种子(seed),就是一个已经下载完成或正在下载的客户端。因为一开始没有这样的种子,所以你得先自己生成一个,如果要为/home/cjh.avi制作种子,相关命令是:

# ./btdownloadheadless.py --max_allow_in 30 --max_upload_rate 1000 --minport 6888 --maxport 6888 /home/cjh.avi.torrent http://www.mydomain.com:6969/annouce

参数说明:

--max_allow 30:指这个种子最多可以接受30个连接。

--max_upload_rate 1000:指这个种子最大的可以接受下载的带宽 1000 KB(byte)/s,这样可以控制下载带宽。

--minport 6888 --maxport 6888:设置最大最小监听端口号码,这样写就是说种子只监听6888端口,这样方便在防火墙上开端口。

cjh.avi.torrent:是制作的种子文件名称。

4.设置Apache服务器

配置Web服务器让种子(.torrent)文件和application/x-bittorrent相关联。不久Apache配置文件:/etc/httpd.conf,加入一行:

AddType application/x-bittorrent .torrent

5.重新启动Web服务器,并且打开防火墙6888端口

将制作的种子放到Web服务器的文档目录中,让用户可以访问,启动一个最原始的共享源。

#iptables -A INPUT -i eth0 -p --dport 6888 -j ACCEPT

#iptables -A OUTPUT -i eth0 -p --dport 6888 -j ACCEPT

#./btdownloadheadless.py http://www.mydomain.com/cjh.avi.torrent

其中http://www.mydomain.com/cjh.avi.torrent是种子的URL地址,这样用户通过浏览器访问cjh.avi.torrent即可实现Web下载。由于笔者是Linux系统管理员,所以习惯使用命令行工作,读者也可以使用图形化的前端工具,如图1所示。


图1 BitTorrent的图形化前端工具

到此为止,我们建立了一个BitTorrent服务器,如果要下载别人的BT资源,还要安装一个客户端。

客户端安装Azureus 下载软件

1.下载一个Bit Torrent客户端软件:Azureus ,官方网址为:http://azureus.sourceforge.net/。

#wget http://ftp10.enet.com.cn/pub/linux/network/transfer/Azureus_2.2.0.2_linux.GTK.tar.bz2

2. 安装Java虚拟机

由于Azureus是使用Java语言编写的,所以运行它需要Java虚拟机。下载最新的JDK(Java Development Kit)开发包:j2sdk-1_4_2-linux-i586.bin,这是一个J2SE V1.4.2 SDK Linux自解压的二进制的文件。

3.安装Bit Torrent客户端软件Azureus

这是一个绿色软件只要解压即可运行不必编译,操作如下:

#bunzip2 Azureus_2.2.0.2_linux.GTK.tar.bz2

#tar vxf Azureus_2.2.0.2_linux.GTK.tar

4.运行软件

#cd azureus

#./azureus

5.配置软件

第一次运行azureus时要进行简单的配置:

● 配置接入互联网的方式

根据你的具体情况设置链接互联网方式(ADSL、Modem等),最大上传速度、最大下载文件、每个Torrent最大上传速度。然后用鼠标按“Next”按钮进行服务器端口配置。

● 配置NAT/Server 的端口

使用NAT(Network Address Translation)的好处是:连接Internet,但不让网络内的所有计算机都拥有一个真正的Internet IP地址。通过NAT功能,可以将申请的合法的Internet IP地址统一管理,当内部的计算机需要上Internet时,动态或静态地将假的IP转换为合法的IP地址。另外,如果不想让外部网络用户知道网络的内部结构,可以通过NAT将内部网络与外部Internet隔离开。这里强烈建议把NAT/Server 的端口设为:最低6881、最高6889。如果读者对计算机网络比较熟悉的话,也可以用鼠标点击“Test”按钮测试一下,选择别的端口。注意千万不要和某些系统已经使用的端口冲突。然后用鼠标点“Next”按钮进行下载的文件存放目录的配置。

6.使用软件下载

配置结束后就可以使用它下载,点击“File”主菜单的“Creat a Torrent”然后输入要下载的Torrent文件的链接即可开始工作。

7. BT下载实例

图2是笔者下载Fedore Core 3 时的工作界面。从图2 中可以看到Azureus下载Fedore Core 3 的IOS文件的截图。图中显示出文件名和下载速度以及完成百分比。基于 Java语言 的 Azureus是一款跨平台的 BT 客户机程序,具备 27 种语言供选择,用户可在单一的 GUI 窗口同时管理多个下载、检视详细的实时下载统计、设定进阶下载管理规则、设置和建立 torrent 等。新版加入了下载速度的限制、共享联机限制及更多资料分栏等。在使用Azureus下载软件的时候如果断线了,可以重新点击下载链接,并且在选择存放位置的时候覆盖上次下载一半的文件,这时程序会自动的续传该文件。


图2 用Azureus下载Fedore Core 3

使用aMule软件

aMule是一种支持ED2K网络的P2P软件,它基于wxWindows并且类似于eMule。是在遵循E-Donkey的网络协议基础上发展而来,它相当于e-Donkey(驴子)的一个Mod,而且源代码是完全公开的。而且aMule比e-Donkey配置更为简单,界面、图标和按钮更美观,突出了其立体和半透明的感觉。现在大家几乎都转向用e-Mule。aMule软件可以算是Linux 网络环境下的e-Mule。

aMule的每个用户端都既是文件下载者又是上传者,既索取又给予。在你正在下载但还没下载完整文件时,你已经把已下载的部分共享给别人了。aMule是同时从很多文件上传者(称之为“源”,跟BT 的种子差不多)那里下载所需的文件最后再拼成整个文件的,而且aMule对没在下载队列中的文件共享很方便,不用像BT 那样要很麻烦地制作种子,再上传到服务器,只需指定一个共享目录,aMule会自动将其共享。这个共享目录在一运行aMule就开始强制共享,即使在下载栏未下载任何文件。这点比BT做得好,可以防止大家好逸恶劳,只下载不上传。而BT 在运行时只上传自己正在下载或已下载完毕的东西,不能共享目录,甚至有人把BT的下载设置为无限制,而把上传调至几KB/s 甚至0KB/S。而在使用aMule中如果你把上传速度设为一个小于10 的值,aMule也会自动限制你的下载速度。

aMule安装相当困难,是笔者使Linux以来最难对付的一个工具软件。它对一些链接库文件的依赖性特别强,另外它还需要GTK的支持。所以这里对于软件安装写得详细一些。软件下载安装详细步骤如下:

#cd /usr/local

#wget http://jaist.dl.sourceforge.net/sourceforge/wxwindows/wxGTK-2.6.1.tar.gz

#wget http://jaist.dl.sourceforge.net/sourceforge/wxwindows/wxBase-2.6.1.tar.gz

#wget http://jaist.dl.sourceforge.net/sourceforge/amule/aMule-2.1.0.tar.bz2

注意安装顺序:先装wxBase再装 wxGTK,最后装 aMule,安装wxBase后要执行一下 ldconfig命令,wxGTK 编译参数为./configure --with-gtk。

#cd wxBase-2.6.1;./configure;make;make install; /sbin/ldconfig;cd ..

#cd wxGTK-2.6.1;./configure --with-gtk;make;make install;make clean;cd ..

#cd aMule-2.1.0;./configure;make;make install

现在 aMule 已经是 GTK 2 界面了,很漂亮,中文支持也很好。安装之后,设置昵称为 [CHN][VeryCD]xxxx,然后服务器设置为:名称DonkeyServer NO1,地址62.241.53.2:4242。另外还有其他的服务器,例如华语psp源动力,地址61.152.93.254:4661;还有Razorback 2,地址为195.245.244.243:4661。服务器设置界面见图3。 aMule使用方法和eMule几乎一样,很快可以上手。


图3 aMule服务器设置界面

如果aMule的下载速度太慢,比如只有2KB/s~3KB/s,那一定是没有端口映射。只需映射4662 TCP 和4672 UDP 两个端口即可。不需要像使用BT 那样映射一堆端口。如果打开了4771 TCP 端口就可远程控制,如果你不在家,朋友的机器上安装有aMule,也可以在朋友机器上远程控制你的aMule。aMule下载跟Azureus 不一样,要多添加些文件下载。如果系统装有Linux防火墙,需要在防火墙中打开以上相应的TCP、UDP端口。

Gtk-Gnutella

Gtk-Gnutella是Linux类(Linux、BSD)系统下 Gnutella 的服务端/客户端实现,该软件依赖于 GTK+ (1.2版以上 ) 、 libxml,但Gnome不是必须的。目前,Gtk-Gnutella主要在Linux(Debian 3.1)下进行开发与测试,至少支持如下操作系统:Linux、 FreeBSD、 NetBSD、OpenBSD、 Darwin、 Solaris、Tru64 UNIX (OSF/1)、 SGI IRIX、BeOS等,支持的CPU构架包括:x86、AMD64、PowerPC、SPARC、MIPS等。Gnutella按照GNU通用公共许可证(GPL)进行发布。 Gtk-Gnutella尚未完工,但已经具有完整的功能,通过Gtk-Gnutella,可以分享、搜索、下载各种文件,Gtk-Gnutella的稳定性也很好,可以自觉地一天接一天地工作下去。

Gtk-Gnutella的开发者认为他们的技术是优于ED2K的。因为它开源,而且因为它没有一个中心服务器,是完全用户之间互联的一个网络,从而保证用户不会被中心服务器监视。可以说,只要有人还在用这个软件,这个网络就不可能消失。虽然最近由于BT等的兴起,其用户数下降比较厉害,但是仍旧可以搜索到大量的资源,速度也很好,搜索网络资源对带宽的需求也比ED2k小。简单地说,Gtk-Gnutella的用户们互相连成一个网络,你的搜索将发给其他Gtk-Gnutella用户,他们再传出去,形成巨大的搜索网络。看起来这样非常消耗网络资源,但是Gtk-Gnutella引入了Ultrapeer和Leaf的概念。如果带宽比较小,搜索请求就会主要传给带宽富裕的Ultrapeer,他们会帮你继续和其他节点联系搜索事宜,搜索到再告诉你。Gtk-Gnutella是一个兼容性不错的客户端,只需要gtk+或者gtk2,而不需要gnome桌面环境。下载安装方法如下:

#cd /usr/local

#wget http://jaist.dl.sourceforge.net/sourceforge/gtk-gnutella/gtk-gnutella-0.96b.tar.bz2

#bunzip2 gtk-gnutella-0.96b.tar.bz2

#tar vxf gtk-gnutella-0.96b.tar;cd gtk-gnutella-0.96b;./Configure;make;make install

执行上述操作后系统会给出一个安装向导,安装指示即可完成安装。Gtk-Gnutella安全性能也比较好,它不能工作在root权限下,必须在普通用户的工作环境下使用。笔者非常欣赏这种方式,工作界面见图4。


图4 Gtk-Gnutella工作界面

Gnutella还有一些客户端可以用,比如LimeWire(http://www.limewire.com/ )。它界面漂亮,人性化,可以换皮肤。但是免费的basic版本速度太慢。

 

目录
相关文章
|
9天前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
146 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
6天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
7天前
|
Prometheus 运维 监控
Prometheus+Grafana+NodeExporter:构建出色的Linux监控解决方案,让你的运维更轻松
本文介绍如何使用 Prometheus + Grafana + Node Exporter 搭建 Linux 主机监控系统。Prometheus 负责收集和存储指标数据,Grafana 用于可视化展示,Node Exporter 则采集主机的性能数据。通过 Docker 容器化部署,简化安装配置过程。完成安装后,配置 Prometheus 抓取节点数据,并在 Grafana 中添加数据源及导入仪表盘模板,实现对 Linux 主机的全面监控。整个过程简单易行,帮助运维人员轻松掌握系统状态。
64 3
|
1月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
41 4
|
1月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
121 3
|
安全 Linux 测试技术
配置Goby工具环境(win,linux,macOS)
配置Goby工具环境(win,linux,macOS)
849 2
|
1月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
114 8
|
1月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
447 6