免费邮箱 |加入收藏 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > 服务器 > 路由技术 > 网络协议

FileZilla FTP服务器源代码分析

时间:2011-05-19 13:05:53  来源:站内  作者:潘春会

FileZilla FTP服务器源代码分析:FileZilla是一款免费而且开源的FTP工具。包括FileZilla Client,FileZilla Server两个版本。FileZilla Server只提供了windows系统下的版本,我们要将本地的网站网页文件上传到网站服务器,或从服务器下载网页文件,只需FileZilla Client客户端版本就可以了。FileZilla FTP服务器源代码分析。
    FileZilla是开源的FTP服务器,用C++写的,通过分析它的源代码,可以掌握C++网络编程以及高并发服务器的设计。
    FileZilla是http://sourceforge.net上的项目,我们要研究的版本是:FileZilla Server 0_9_18,其实FileZilla还包括客户端软件。
    下载后安装,安装时选择安装source,即安装了源代码。
    安装完成后,可以直接打开工程自带的FileZilla server.sln,这个是vs 2003.net工程,里面有三个project,FZS Interface:这个是FTP服务器的设置以及监控界面Service:这个是核心的FTP服务器部分GFtp:打不开,不知是干什么用的,老外也会如此马虎? :)
    直接编译是会出错,主要是FileZilla需要依赖两个第三方包:zlib(压缩算法包)以及regexp(正则表达式的包)
    先搞定zlib,下载、解开,生成目录zlib123,用。net 2003打开zlib123projectsvisualc6zlib.dsw
    打开 生成|配置管理器,设置活动的解决方案配置为:DLL Release,编译生成项目zlib,成功后会在目录Win32_DLL_Release下生成zlib1.lib和zlib1.dll
    然后,regexp用到了boost第三方包,这里面有很多公用的C++组件。
    下载、解开后,在cmd下,
    第一步:需要编译bjm,这是编译boost的编译器,晕
    cd boost_1_33_1toolsbuildjam_src
    build.bat
    在当前的bin.ntx86目录下,生成了bjam.exe文件。
    第二步:编译boost
    cd boost_1_33_1
    将刚才生成的bjam.exe拷过来
    set VC7_ROOT="C:Program FilesMicrosoft Visual Studio.NET 2003Vc7"
    bjam "-sTOOLS=vc7" install
    这个步骤需要很久时间,其时我们只用了里面的regexp包,应该可以只编译这个包,但我没细研究。
    编译完成后即在C盘根目录下生成了boost目录,这个目录下面。net工程要用到。
    在。net工程里,工具|选项|项目|VC++目录,添加
    可执行文件:zlib123projectsvisualc6Win32_DLL_Release
    包含文件:zlib123目录以及c:Boostincludeboost-1_33_1
    库文件:zlib123projectsvisualc6Win32_DLL_Release以及c:Boostlib
    这时FZS Interface工程应该可以编译成功了,编译完成后会在Debug目录生成FileZilla Server Interface.exe。
    生成Service工程时,需要调整一下工程设置:
    语言设置:打开工程属性页,配置属性|常规,选择字符集为“使用 Unicode 字符集”,否则编译时会出错unicode必须使用;
    链接设置:打开工程属性页,配置属性|链接器,将输入zlib.lib改成zlib1.lib(因为zlib123工程生成的是zlib1.lib)
    下面生成一下,应该可以了。在生成Service工程完成时已经自动安装了"FileZilla Server FTP server"服务,也可以手工安装服务:
    cd FileZilla_ServerDebug
    "FileZilla server.exe" install auto
    可以试一下这个FTP服务器了,运行FileZilla_ServerinterfaceDebugFileZilla Server Interface.exe,这是FTP服务器的配置监控程序,试着加几个user,设置home dir,再用FTP客户端连接一下试试,应该可以了。

FileZilla FTP服务器源代码分析:FileZilla是一款免费而且开源的FTP工具。包括FileZilla Client,FileZilla Server两个版本。FileZilla Server只提供了windows系统下的版本,我们要将本地的网站网页文件上传到网站服务器,或从服务器下载网页文件,只需FileZilla Client客户端版本就可以了。FileZilla FTP服务器源代码分。在进一步分析代码之前,先复习一下FTP协议,下图是FTP的结构图。

 
    客户端和服务器是通过两个连接来进行通讯的:
    一个是控制连接,也就是传输些控制命令,客户端发出FTP命令,服务器给出应答,例如:USER,PASS命令等等。这个连接中,FTP服务器的端 口就是熟知的21端口,连接是由客户端发起的,例如:ftp 192.168.0.1。有一点注意,用户是通过“用户接口”来操作的,一般的用户接口是指cuteFTP这些FTP客户端,或者ftp.exe这种命令 行程序,用户在用户接口使用的是ftp命令,如ls, get, cd等,这些ftp命令并不是真正与FTP服务器交互的命令,这些ftp命令还需要由“用户协议解释器”翻译成真正的ftp协议命令,如USER, PASS,才能与服务器进行交互。
    一个是数据连接,即真正的文件传输是在这个连接上进行的。服务器端的数据连接端口是20,客户端的数据连接端口是随机生成的。数据连接只在传输文件 时存在,文件传完后,这个连接就断了,如果需要再次传送文件,会再次建立一个数据连接(客户端的端口是随机的,不一定是上次的那个)。数据连接的模式有两 种,一种是主动方式,一种是被动方式,两者的区别在于数据连接是由谁发起。
    我们来看一个典型的FTP交互过程,用的是windows的

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
如何找出DHCP地址池里未使用的IP地址
如何找出DHCP地址池里
国内常用的DNS列表
国内常用的DNS列表
Linux邮件服务器软件比较
Linux邮件服务器软件比
学用纯CSS打造可折叠树状菜单
学用纯CSS打造可折叠树
相关文章
栏目更新
栏目热门