glFtpD-从入门到精通[转]

[前面的废话]

glFtpD是一个从linux平台上开发出来的FTP服务器软件,现在已经被移植到FBSD, OBSD
, NBSD及Solaris等多个*NIX平台上。glFtpD因其强大而丰富的功能配置,被广泛流传于
**z的世界中。glFtpD的名字来源于她的创始人:Greyline,其全称是GreyLine File T
ransfer Protocol Daemon(也不知是真是假)。其官方网站是glFtpD。打算写以下几篇
介绍文章。由于我用glFtpD也仅仅半年,其中难免有疏漏和错误,欢迎大家补充修正。

有兴趣看下它的官方帮助:http://www.glftpd.com/files/docs/glftpd.docs

[第一篇]功能简介:介绍在glFtpD的client一端,如何使用site指令进行操作。
[第二篇]安装指南:介绍如何安装glFtpD在linux上。
[第三篇]服务配置:介绍如何配置glFtpD及cookie的使用。
[第四篇]zipscript:以Jehsom的zipscript为例,介绍如何实现自校验及分类统计等外
挂脚本的使用。
[第五篇]glFtpD on Solaris:介绍我如何把glFtpD移植到Solaris上的经验。

标准的ftp服务器(以solaris自带的ftpd为例)只接受下面几个指令。(关于标准的FTP P
rotocol可以参阅RFC959,估计没什么人会去看的)

ftp> help
Commands may be abbreviated.   Commands are:
!
cr               macdef           proxy            send   $
delete           mdelete          sendport         status   account
debug            mdir             put              struct   append
dir              mget             pwd              sunique   ascii
disconnect       mkdir            quit             tenex   bell
form             mls              quote            trace   binary
get              mode             recv             type   bye
glob             mput             remotehelp       user   case
hash             nmap             rename           verbose   cd
help             ntrans           reset            ?   cdup
lcd              open             rmdir   close            ls
prompt           runique
ftp>

除了支持标准的ftp指令,glFtpD的特点之一是其client还可以使用丰富的site指令集来
进行操作。如同在ftp里开了个shell一样,ftp的用户可以被分成不同的group,每个gr
oup可以有自己的管理员,整个站点还有自己的站长,不同用户可以被赋予不同的权限,
所有这一切都可以通过远程的ftp来实现。以下是我查看在我服务器上会员状态的例子:

===================   FREE DISK SPACES: 803.7MB    =======================
User ashcan logged in.   Logged in to XXX.XX.XX.XXX.
ncftp / > ls   a$fMs@ROR/
ncftp / > site who
Users Logged Onto a$fMs@ROR
.————————————————————————-.
| User         Group       Unfo                Action                         |
|———–+———-+——————+——————————-|
| fsq        | member    | No Tagline Set    | DL: aot_a.r07     at 22.2K/s    |
| zhang      | member    | No Tagline Set    | DL: mihk_b.r28    at 20.3K/s    |
| ashcan     | SiTEaDMi | oMG OMg           | SITE who                       |
|———–+———-+————+—–+——————————-|
| Total upload speed:         0.0K/s | Total download speed:        42.5K/s |
|———————————–+————————————-|
|   3 of 50 User(s) Currently Online                                        |
`————————————————————————-‘
Command Successful.

ncftp / >

site指令集根据其功能(以1.26版为例),大体可以分为四类:
用户管理,站点管理,信息查询,自定义指令。

用户管理:
Syntax: SITE ADDUSER [ <sp> username <sp> password ]: 加用户和密码
Syntax: SITE ADDIP [ <sp> username <sp> ip […<sp> ip10] ]: 加用户的IP
Syntax: SITE GRPADD [ <sp> group name <sp> group info ]: 加用户组
Syntax: SITE DELUSER [ <sp> username ]: 删除用户
Syntax: SITE DELIP [ <sp> username <sp> ip […<sp> ip10] ]: 删除用户的IP
Syntax: SITE GRPDEL [ <sp> group name ]: 删除用户组
Syntax: SITE RENUSER [ <sp> old_username <sp> new_username ]: 更改用户名
Syntax: SITE CHPASS [ <sp> user <sp> password ]: 更改用户密码
Syntax: SITE READD [ <sp> username ]: 重新加被删除的用户
Syntax: SITE PURGE [ <sp> user ]: 彻底去掉被删除的用户
Syntax: SITE GRPLOG [ <sp> groupname <sp> Num]: 设置该组允许登录的用户数
Syntax: SITE USERS [ <sp> option ]: 查看站点的用户。(option一项用于查询具有该
属性的用户)
Syntax: SITE USER [ <sp> username ]: 查看用户的具体信息
Syntax: SITE CHANGE
[ <sp> username <sp> field <sp> value ]:
[ <sp> { <user1> <sp> <user2> } <sp> field <sp> value ]:
[ <sp> =groupname <sp> field <sp> value ]:
[ <sp> * <sp> field <sp> value ]:

更改或设置用户的权限及属性
其中field一栏可以有以下参数:
ratio 上传/下载比例 (3表示上传1M可下载3M,0表示leech)
max_dlspeed 最大下载速度 (KB/s)
max_ulspeed 最大上传速度 (KB/s)
max_sim_down 同时下载线数
max_sim_up 同时上传线数
homedir 用户的根目录 (用户不能cd到其根目录之外)
startup_dir 用户的起始目录 (用户登录后所在的目录)
time_limit 用户在线时间限制 (min)
timeframe 用户在线时间段限制
num_logins 用户允许的同时登录数 (第二个参数是从同一IP的登录数)
flags 用户属性 (如1是站管理员2是组管理员8是匿名用户…)
注1:glFtpD中,必须规定用户登录的IP,如果想取消次限制,把用户IP设成*@*
注2:以上及以下的指令集并不完全,因为只是简介,请参看glFtpD的说明文档获取全部
指令集的内容

站点管理:
Syntax: SITE WHO [ <sp> ]: 查看在线用户
Syntax: SITE NUKE [ <sp> directory <sp> ratio <sp> message ]: NUKE一个目录
Syntax: SITE DUPE [-max <num>] searchstr1 [searchstr2 …]: 查询数据库中重复
的目录及文件
Syntax: SITE UNDUPE [ <sp> file ]: 在数据库中删除重复的文件
Syntax: SITE KILL [ <sp> pidtokill ]: 杀掉一个进程
Syntax: SITE KICK [ <sp> usertokill ]: 把一个在线用户蹬出去

信息查询:
Syntax: SITE TRAFFIC : 查看站点流量
Syntax: SITE NEW [ <sp> num ]: 查看新建的目录
Syntax: SITE RULES : 查看站点规章制度
Syntax: SITE ALUP [num] [section]: 查看上传者排行榜
Syntax: SITE ALDN [num] [section]: 查看下载者排行榜
Syntax: SITE REQUEST [ <sp> request ]: 查看或添加Request
Syntax: SITE REQFILLED [ <sp> request #]: 标记已经完成的Request
Syntax: SITE MSG [ <sp> username <sp> message ]: 查看或发送消息(简单的mail b
ox)

自定义指令:
除了glFtpD提供的site指令外,服务器管理员还可以自己定义增加site指令。这将在以
后的章节中(服务配置)介绍。glFtpD的魅力就在于她的可扩展性,我们可以自己写许多
外挂的脚本增加她的功能。

第一篇完,待续。。。

glFtpD-从入门到精通:第二篇 安装指南

在linux上安装glFtpD不是件难事,如果一切顺利得话,只要执行随其自带的安装脚本i
nstallgl.sh就可以了。虽然没有rpm那么方便,但基本上也不费什么脑子的。在这一篇
里,我想通过对installgl.sh这个脚本多一点的分析,看看安装过程都究竟做了些什么
,从而对glFtpD能有个更全面的了解。

glFtpD的作者们没有提供程序的源代码,但是提供了以下几个不同平台上编译好的执行
文件。这些平台包括:linux on x86, linux on power pc, linux on sparc, freeBSD
on x86, openBSD on x86, openBSD on sparc, netBSD on x86, Solaris on sparc和
AIX。所以目前,glFtpD只能安装在这些平台上。以linux on x86为例,安装glFtpD1.2
6的简要步骤如下:

1. 首先你要有root权限,你的kernel里有share memory的ipc support(一般都有的,除
非你特意给去掉了),并且glFtpD只能安装在unix类型的文件系统下(ext2/ext3)。Trac
y JJ曾介绍过如何在linux下读写windows的分区(fat,ntfs),但是glFtpD不能装在这些
分区上,因为这些分区不支持set uid和set gid的操作。

2. 下载glFtpD的软件包glftpd-LNX_1.26.tgz,执行tar zxvf glftp-LNX_1.26.tgz在当
前路径下解出glftpd-LNX_1.26的目录。

3. 在glftpd-LNX_1.26的目录下执行installgl.sh的脚本,脚本执行过程中会询问你把
glftpd安装到哪里(不要直接装到根目录/下),以及glftpd占用的端口。系统自带的ftp
服务器一般使用21号端口,建议安装时先不要用21,可以选择一个空闲的高端(如4021)
,这个端口在安装完成之后,可以修改。

4. 如果一切顺利,安装脚本没有报任何错误信息的话,你就已经安装好了glftpd。可以
用glftpd安装后的缺省用户glftpd/glftpd测试是否能登录到服务器上。需要注意的是,
此用户只能在本机上通过localhost登录,不能用你机器的IP。

[ashcan@localhost ashcan]$ ftp localhost 4021
Connected to localhost.localdomain.
220 MY SITE NAME (glftpd 1.26_Linux) ready.
Name (localhost:ashcan): glftpd
331 Password required for glftpd.
Password:******
230 User glftpd logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

脚本installgl.sh支持linux和bsd平台的安装,在solaris上的安装将会在第五篇里单独
介绍。下面我们来具体分析一下glftpd的安装过程。

glFtpD就象是在操作系统里的一个独立王国一样,相对独立于外围的操作系统。这一切
都是通过chroot来实现的。如果你把glftpd安装到/glftpd的目录下,那么在glFtpD启动
后,第一件事就是chroot到/glftpd目录下。在这之后的一切操作,都会把/glftpd目录
当成是根目录/,这样可以保证ftp的用户不能接触到/glftpd目录之外的文件系统。这一
点和通常设置anonymous的FTP服务类似。

一些重要的系统目录,如/bin /lib /dev /etc等必须存在与chroot后的根目录下以保证
系统的正常运做。看一下glftpd下的目录结构就清楚了。
-$glroot (安装glftpd的目录,chroot后的根目录)
|__bin/ (glftpd的可执行文件及重要的系统命令、系统执行文件)
|__lib/ (重要的动态连接库文件,许多系统指令执行时,需要用到动态连接库)
|__dev/ (系统设备)
|__etc/ (用户密码文件passwd及用户组文件group)
|__ftp-data/ (用于存放用户配置,glftpd日志,及各种文本信息)
|__site/ (这里面是ftp用户能看到的,用于上传下载文件的地方)
|__sitebot/ (bot脚本,glftpd可以和IRC联系在一起,自动往IRC里发送该ftp站点的
信息,release,dupe,etc.) cooool

明白这些之后,再看安装脚本就方便了:

installgl.sh解析
# 用bash执行此脚本,确认是root来执行   ….略….
# 确认系统平台是linux还是bsd
case $(uname -s) in       Linux)
os=linux           ;;       *[bB][sS][dD]*)
os=bsd           ;;       *)
echo “Sorry, but this installer does not support the $(uname -s) flatform.”

# 重要的系统命令,将copy到$glroot/bin里去
BINS=”sh cat grep unzip wc find ldconfig ls bash mkdir rmdir rm mv cp \
ln basename dirname head tail grep cut tr wc sed date sleep touch gzip zip”

# 读入glftpd的安装目录($glroot),确保其不是/   …略…

# 把整个目录glftpd-LNX_1.26拷贝到glftpd安装目录下   cp -Rf * .[^.]* “$glroot”

# 把glftpd的配置文件glftpd.conf拷贝到/etc,glftpd.conf将在下一篇中介绍   …略
..

# 把上诉重要的系统指令copy到$glroot/bin
for bin in $BINS; do       echo -n ”    $bin: ”
type $bin > /dev/null ||
{       echo “FAILED! You must find & copy $bin manually.”       continue
}
cp -f “$(which $bin)” “$glroot/bin”
echo “OK”   done

# 建立重要的系统设备/dev/null
/dev/zero   echo -ne “\nMaking glftpd’s /dev/null & /dev/zero . . . ”
case
$os in       linux)
mknod -m666 “$glroot/dev/null” c 1 3
mknod -m666 “$glroot/dev/zero” c 1 5          ;;   bsd)
mknod “$glroot/dev/null” c 2 2
mknod “$glroot/dev/zero” c 2 12
chmod 666 “$glroot/dev/*”
;;   esac   echo “Done.”

# 编译glftpd要用到的一些工具程序,如dupeclean, checksfv
for cfile in $glroot/bin/sources/*.c;
do       base=”$(basename “${cfile%.c}”)”
[ -f “$glroot/bin/$base” ] && rm -f “$glroot/bin/$base”
echo -n “Compiling $cfile to $glroot/bin/$base . . . ”
gcc -o “$glroot/bin/$base” “$cfile” > /dev/null 2>&1 && echo ‘Success’ || ec
ho -e ‘\033[1;31mFailed!\033[0m’
done

# copy需要的动态连接库文件到$glroot/lib/
ldd “$glroot”/bin/* | grep “=>” | sed ‘s:^.* => \(/[^ ]*\).*$:\1:’ |   sort |
uniq | while read lib; do
echo -n ”    $(basename $lib): ”
if [ -f “$lib” ];
then           cp -f “$lib” “$glroot/lib”
echo “OK”
elif [ -f “/usr/compat/linux/$lib” ];
then   cp -f “/usr/compat/linux/$lib” “$glroot/lib”
echo “OK”
else echo -e ‘\033[1;31mFailed!\033[0m'” You must find & copy $(basename $li
b   ) to $glroot/lib manually.”
fi   done

# 设置glftpd端口,修改/etc/services中对应的入口

# 设置inetd.conf或xinetd(redhat)中glftpd的服务

# 设置cron job清除每日的统计数据   …略…
在安装之后,先用glftpd的帐号登录,创建站长的帐号及其他用户帐号后,可以将glft
pd的帐号删除。要修改glftpd的端口,可以在/etc/services中找到glftpd的记录,修改
端口号,用killall -HUP inetd或/etc/rc.d/init.d/xinetd (redhat)来重起glftpd。

glftpd的配置(glftpd.conf)将在下一篇中介绍。待续。。。
明天休息一天

glFtpD-从入门到精通:第三篇 服务配置

这周ROR经常出些连接上的故障,加上我正在摸索glftpd里sitebot的使用,所以隔了一
周才写了这第三篇。也不知大家是否还有兴趣

在第一篇中已经简要介绍了如何使用glFtpD的site指令集实现对用户的远程管理。许多
用户配置功能,如登录限制,上传下载限速,以及上传下载的线数都是通过site指令集
来做的。在这一篇里,着重介绍如何使用glftpd.conf文件对服务器进行配置。

glFtpD安装之后,会成为inetd中的一项服务。当用户连接到glftpd所注册的端口后,由
inetd来激活glftpd,同时加载配置文件glftpd.conf给glftpd。所以修改glftpd.conf之
后,不需要重启inetd,用户再次login服务器之后就会使用新的配置文件了。以下是gl
ftpd.conf中一些常用的配置选项(不完全):

[一]服务器信息:

sitename_long <name>[:space:]<name>
# 站点全名(注:glftpd.conf中字符串中的空格一律写成[:space:],#写成[:hash:]),

# 如 sitename_long aSHCaN:FoRieGN[:space:]MoiVe[:space:]STaTioN@ROR
sitename_short <abb>

# 站名缩写,如 sitename_short a$fMs@ROR
login_prompt <string>

# 用户连接服务器时,提示服务器信息。例如,没有设置时,
$ ftp xxx.xx.xx.xxx xxxx
Connected to xxx.xx.xx.xxx.
220 aSHCaN:FoReiGN
MoiVe STaTioN@ROR (glftpd 1.26_Linux) ready.
Name (xxx.xx.xx.xxx:ashcan):

设置login_prompt ^_^Welcome[:space:]TO[:space:]a$fMs@ROR^_^后
$ ftp xxx.xx.xx.xxx xxxx
Connected to xxx.xx.xx.xxx.
220 ^_^Welcome TO a$fMs@ROR^_^
Name (xxx.xx.xx.xxx:ashcan):
welcome_msg <path/filename> <flags/=groups/-users>

# 用户login后,将首先显示此文件内容,如站点规章制度等,或站点介绍。
# 注1:此处的path是对于glftpd安装路径的相对路径,比如glftpd安装在/glftpd下,

# 显示
# 的文件是/glftpd/ftp-data/misc/welcome.msg,此处填写/ftp-data/misc/welcome.
msg
# ,以下
# 所有的路径,除rootpath一项之外,都是相对路径。
# 注2:flags是用户的属性(如1是站管理员2是组管理员8是匿名用户…),=后跟用户组

# 称,
# -后跟用户名称,可以设置不同的文件显示给不同的用户类别。
其它goodbye_msg newsfile 等设置与此类似。

[三]权限设置

权限设置包括

download/upload/delete/deleteown/resume/overwrite/rename/renameown /makedir等
,其格式都是:
Function path flags/-user/=group
可以对同一操作设置多个不同的权限给不同的用户类别,以makedir举例说明:
makedir   /site/upload/*   =member -admin 1
makedir   /site/download/* -admin 1
makedir   * 1

表示在/site/upload路径下,member组的成员,用户admin,和所有的站点管理员可以建
目录,在/site/download路径下,只有用户admin和管理员可以建目录,对于其他所有路
径,只有管理员可以建目录。需要注意的是,三条限制指令的顺序很重要。比如把make
dir * 1放在前面的话,后两条权限设置都会失效,因为/site/download和/site/uploa
d都包含在*下面了。所以越广泛的路径应该放在越后面。

权限设置deleteown的好处是,可以设置统一上传目录,不同用户只能删除自己上传的文
件而不能删除别人上传的文件,这样既方便上传者,又可以有效防止deleter。
除了上述操作权限外,在glftpd.conf中还可以定义每个site指令的执行权限,格式是-
sitecmd [flags|-user|=group]+,例如
-adduser 1 2 =SiTEaDMiN -admin

表示只有站点管理员(1)、组管理员(2)、SiTEaDMiN组的用户和用户admin可以执行
site adduser指令。
[四]扩展功能
在glftpd.conf中还可以自定义site指令,定义格式是
site_cmd <cmd name> <exec/text/is> <filename> [optional argument]
exec表示执行一个执行文件或脚本,text表示显示一个文本文件,is表示执行一个内部
site指令。

在定义完指令后,还必须给指令加执行权限,例如:
site_cmd RULES TEXT /ftp-date/misc/site.rules   site_cmd RELEASE EXEC
/bin/release.sh   custom-rules *   custom-release =SiTEaDMiN -admin 1
定义了两条site指令,site rules将显示文本文件/ftp-date/misc/site.rules的内容,
所有用户都可以执行;site release将执行/bin下的脚本release.sh,只有用户admin,
SiTEaDMiN组内的用户和站点管理员可以执行。

以下几条设置和zipscript与botscript相关
calc_crc [<filemask>|<path>]
pre_check /bin/dupescript [path mask]
pre_dir_check /bin/dirscript [path mask]
post_check /bin/zipscript [path mask]
botscript_path <path>

calc_crc设置对什么样的上传文件,glftpd会自动计算文件的CRC值,此CRC值将作为参
数传给post_check里定义的脚本或程序。下面的calc_crc设置将自动计算所有*.rar,*
.000-*.999,*.r00-*.r99及所有/site/Music/目录下上传文件的CRC值。
calc_crc *.[rR][aA][rR] *.[rR0-9][0-9][0-9] /site/Music/*
pre_check定义在上传文件前执行的脚本,主要用于dupe check。pre_dir_check定义在
创建目录前直行的脚本,post_check定义上传完毕后执行的脚本。[path mask]定义在哪
些路径下,这三个设置有效。

botscript_path定义botscript所在的路径,botscript将在所MKDIR/DELDIR/NUKE后执行
,可用于自动向IRC发布站点的消息。关于zipscript及botsript将在下一篇中作为glft
pd高级应用来介绍。

[关于cookie]

glftpd中还定义了许多cookie,这些cookie可以在许多文本文件中用于显示一些和服务
器有关的动态信息。很多例子可以在glftpd安装路径的ftp-data/misc和ftp-data/text
目录下找到。下面简单是一些常用的cookie:

%[%f]F: 当前目录下的空间MB
%[%d]M: 允许的在线用户数
%[%s]S: 站点全名
%[%s]s: 站点缩写
%[%d]B: 当前在线用户数
%[%s]Iu: 用户名
%[%s]Id: 用户是否有msg
%[%d]If: 所有上传文件数
%[%f]IG: 所有上传文件大小MB
%[%d]Ii: 所有下载文件数
%[%f]IJ: 所有下载文件大小MB
%[%f]IU: 平均上传速度K/sec.
%[%f]ID: 平均下载K/sec.
%[%f]Iz: 用户允许的最大下载速度
%[%f]I&: 用户允许的最大上传速度

到这里,glftpd的入门篇就全部介绍完了。由此,我们可以看到glftpd强大的管理能力
。glftpd更大的魅力在于她的扩展性、灵活性,怎样把glftpd和IRC联系在一起,这些都
将在下一篇中介绍。

由于我自己还在摸索sitebot的使用,加上下周会外出一段时间,所以第四篇可能要两周
时间才能完成。

glFtpD-从入门到精通:第四篇 zipscript & botscript

不知道glftpd之前,实在没想过一个FTP的服务器能写成这样,真是拜倒。相比之下,那
些wuftpd,warftpd,proftpd,serv-u之类的都成了儿童玩具。glftpd除了前几篇里提到的
配置及管理上的特点之外,最过分的就是和其与各种脚本程序的连接和应用了。这一篇里主
要介绍glftpd里的zipscript和botscript。

[一] zipscript

zipscript就是一些脚本程序(shell script, perl script, tcl script, …),当你上
传文件或新建目录后,glftpd可以自动调用执行这些脚本,对上传的文件及目录进行处
理和统计。zipscript的一个最重要的应用就是对上传文件的自校验。我们先来看看,g
lftpd是怎样调用这些脚本的。在glftpd的config文件里,有以下几个设置:

pre_check /bin/dupescript [path mask]

# pre_check是在upload之前执行的脚本,主要用途是检验上传文件的类型是否符合规定

pre_dir_check /bin/dirscript [path mask]
# pre_dir_check 是在新建目录前执行的脚本,主要用在做dupe check上。
post_check /bin/zipscript [path mask]
# post_check 在上传完文件之后执行,上传文件的CRC校验就是通过这个来实现的。
# glftpd在调用post_check脚本时会自动传三个参数,$1是上传文件的文件名,
# $2是上传文件所在的目录,$3是上传文件的CRC校验值。

glftpd里,可以实现上传文件的flysfv计算,就是一边传,一边计算CRC的校验值,这样
可以节省CPU的利用率,具体方法是通过config文件里的calc_crc一项来规定对什么类型
的文件计算CRC,这个CRC值就是传给zipscrip的第三个参数。zipscript可以拿这个CRC
值与传上来的sfv文件里的CRC值进行比较,判断上传文件是否正确。

关于那个pre_dir_check,除了做dupe check之外,还可以用来做一些小技巧。在我的F
TP上,我写了一个小脚本做pre_dir_check。里面规定了一些特殊的目录名,例如用户在
其上传的目录里建一个-=done@afMs=-的目录,就可以把这整个上传的目录release到/d
ownload目录下。这样FTP的用户就可以通过建一个特殊名字的目录来让FTP服务器执行一
些功能。尽管glftpd提供了强大的site指令集,但是许多windows下的ftp用户无法使用
,这个pre_dir_check的方法可以作为site指令集的部分替代或补充。

[二] jehsom’s zipscript

glftpd里自带的zipscript比较简单,jehsom’s zipscript是一个比较流行的zipscript
,在这里也简单做一下介绍。jehsom’s zipscript可以在这里下载。在linux上的安装比
较简单,只要执行里面的install脚本就可以了。关于glftpd及zipscript在solaris上的
安装将在下一篇里介绍。jehsom’s zipscript是用c程序和bash脚本编写的。里提供了一
个jzipscript.conf的配置文件,下面简单说一下这里面的配置:

EXCLUDE # 设置哪些目录不处理
REQUIRE_NFO # 规定完整的rls是否要包含nfo文件
RENAME_BAD # 坏文件(CRC FAIL)的文件是否要重命名为.bad
SHOW_PROGRESS # 上传完文件后,是否在上传者的ftp log里显示进程,
例如:
[###########################] (100.00%) : 27/27 files present
,—————————————————-.
|RNK / Racer/Group    / Size [KB] / #F /     %    / K/s |
|—|—————|———–|—-|——–|——|
| 1 |         pandal |     205078 | 14 |   53.04 |    18 |
| 2 |         anarky |     181597 | 13 |   46.96 |    34 |
|—|—————|———–|—-|——–|——|
| 1 |            0CD |     386676 | 27 | 100.00 |    23 |
`—+—————+———–+—-+——–+——‘
MISSING_FILE_MARKERS
# 是否对缺的文件否建一个MISSING标记
# MISSING是根据sfv文件里的内容来判断的,如果sfv里列出的文件还
# 未完成或CRC FAIL,可以在该目录里建一个{filename}-MISSING
# 的空文件提示该文件还没有完成。   COMPLETE_DIR
# 设置完成后显示COMPLETE的标记,
如:
# 我的FTP里是 [afMs]–[COMPLETE]-[–all-files-CRC-ok–]–[ROR] INC_DIR
# 设置未完成时的标记,如:
# 我的FTP里是 [afMs]–INCOMPLETE-[####———-]-[20%]–[ROR]

jehsom’s zipscript可以处理MovieZ,0Days,MP3等多种不同的rls,可以自动截取nfo里
的信息,与上传进程一起写到上传目录里的.message文件里。前几个星期曾有人问过,
FTP里常有个.message的文件是做什么用的。glftpd里,当用户cd到某个目录里时,glf
tpd会自动显示这个目录里.message文件里的内容,这个.message文件就往往是zipscri
pt生成的,以下是我的FTP上的一个例子:
FlashFXP v2.0 Release Candidate 2 (Debug Version)
Online Support Forums http://forum.flashfxp.com
WinSock 2.0
Connecting to afMs
Connected to xxx.xx.xx.xxx Port xxxx
220 ^_^Welcome TO a$fMs@ROR^_^
USER ashcan
331 Password required for ashcan.
PASS (hidden)
230-                                 _____
230- ______________________________|__    |____ _____________________________
___
230- \      _       /    _      /   _      /    |     |     _      /   _      /     _
/
230-   \     \      /     /     /    /____/.    |     |     /     /    /____/.     /____
_/
230-    \________/____/     /______     |___|____|___/     /______     |____|
230- .-=———– /____/ —- |____| ——— /____/ —- |____| ——-=
-.
230-            -= WELCOME TO aSHCaN: FoReiGN MoVIe STaTioN @ROR =-
230- `-=——————————————————————-=
-‘
PWD
257 “/download/08.23.02” is current directory.
CWD
08.18.02.Ponette.1996.DVDRip.Divx.VH-PROD
250- Excerpt from .NFO file
250- ———————-
250- IMDB URL: http://us.imdb.com/Title?0117359
250-
250- RLS Information
250- —————-
250- Name     : 08.18.02.Ponette.1996.DVDRip.Divx.VH-PROD
250- Status   : COMPLETE
250- Progress: [#########################] (100.00%) : 50/50 files present
250- Avg Spd : 19.25 K/s   250- Size     : 707.47 MB
250- Started : Thu Aug 22 06:02:40 2002
250- Changed : Fri Aug 23 02:41:03 2002
250- RaceLen : 20:38:23   250- ———————–
250-
250
CWD command successful.
226- [Ul: 25432.9MB] [Dl: 42828.8MB] [Speed: 2.81K/s] [Free: 2787MB]
226   [Section: DEFAULT] [Credits: 14.6MB] [Ratio: Unlimited]

[三] botscript

botscript是glftpd的另外一个精华所在。通过botscript,glftpd可以和IRC联结在一起
。FTP上的new release可以在IRC上announce,还可以通过IRC来对FTP进行管理和配置。
用botscript,得先说说ircbot。ircbot也是一些程序,是robot的意思。一般是用来在
irc channel里提供一些自动服务的。其来源是一些人为了占据某些特殊的channel,写
了一些程序可以自己连到irc上,象普通irc用户一样。慢慢的功能就越来越多,monito
r channel啦,ban user啦,甚至作为hacker的工具。几年前著名的让yahoo,ebay,和
amazon等当机的hacker事件主要就是用这些bot。我们这里的bot是良性的,不干坏事。

最流行的ircbot要算是eggdrop了,大量的botscript都是用tcl来写的。glftpd里的bot
script基本上有三种方式和ircbot连接。第一种是由glftpd来联络bot。在glftpd的con
fig文件里,可以设置bostscript。glftpd里规定,在ftp里新建一个目录,删除一个目
录,nuke或unnuke一个目录时,会自动执行这个botscript。这个botscript其实就是发
送一个HUP信号给eggdrop,eggdrop重新启动,在eggdrop里load的tcl脚本也就自动执行
。一般eggdrop里的tcl脚本可以通过查询glftpd的log找到新建的目录等在IRC里announ
ce。botscript还可以通过zipscript来启动。因为zipscript一般掌握着FTP上上传及完
成的第一手资料,通过zipscript可以向IRC通报完成的release或上传的进程。

glftpd和ircbot的第二种连接方式是通过IRC来管理FTP,著名的DaRKHeaRT的botscript
就是这样的。DaRKHeaRT的bot需要在glftpd里建一个ftp帐号,bot可以通过这个帐号登
陆到FTP上,从而实现在IRC里向bot发送指令来管理和监视FTP上的状况。第三种方式比
较简单,不需要glftpd和ircbot直接联系,bot通过查询FTP所在的系统目录来向IRC Ch
annel里的用户发送消息。我做了一个小bot在ROR的IRC里,你可以到#afMs-iNFo里去向
那个bot查询我FTP上的online movie。我还会陆续在bot里增加一些新的功能。

[四] 其他

除了zipscript和botscript之外,还有一些其他的script也挺有意思,有兴趣的话可以
到glftpd的主页上看看,例如ban user,规定user必须在irc里才可以登陆ftp等等。gl
ftpd现在只能开发在linux和少数unix系统上。这主要是其作者没有release源程序,所
以大家只能安装编译好的glftpd。didi用的RaidenFTPD可以算是glftpd在windows上的c
lone,不过这两家经常打口水仗。windows的用户如果想体验一下,可以试试RaidenFTP
D。

作者:小老外

我还需要不断地学习。

2条评论

  1. 我能否这样理解,一个以CMD命令行模式执行的FTP

  2. 所有FTP都是以命令的形式运行的啊,你看flashfxp、ftprush发送文件、接收文件,哪一个不打命令?还有,ftpd和ftp是不一样的,ftpd是服务程序(ftp平台的搭建运行),ftp是总概念。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据