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

FileZilla FTP服务器源代码分析

时间:2011-05-19 09:24:48  来源:站内  作者:潘春会
ftp.exe程序,先建立一个连接,然后ls看一下文件列表,用get命令下 载一个文件,最后quit关闭。下面-d选项可以显示交互的细节,注意-->开头的行是ftp客户端发给FTP服务器的请求,3个数字开头的行是服 务器的应答,如220, 331等开头的行:
    C:>ftp -d localhost
    Connected to dell.
    220-FileZilla Server version 0.9.18 beta
    220-written by Tim Kosse (Tim.Kosse@gmx.de
    220 Please visit http://sourceforge.net/projects/filezilla/
    User (dell:(none)): robert
    ---> USER robert
    331 Password required for robert
    Password:
    ---> PASS test
    230 Logged on
    ftp> ls
    ---> PORT 127,0,0,1,4,173
    200 Port command successful
    ---> NLST
    150 Opening data channel for directory list.
    Manual.txt
    226 Transfer OK
    ftp: 收到 175 字节,用时 0.00Seconds 175000.00Kbytes/sec.
    ftp> get Manual.txt
    ---> PORT 127,0,0,1,4,174
    200 Port command successful
    ---> RETR Manual.txt
    150 Opening data channel for file transfer.
    226 Transfer OK
    ftp: 收到 17319 字节,用时 0.09Seconds 192.43Kbytes/sec.
    ftp> quit
    ---> QUIT
    221 Goodbye
    C:>

刚开始,客户端发出建立连接的请求:
    1.C:>ftp -d localhost // 建立连接  2. 3.Connected to dell. // 连接已建立  4. 然后服务器发送欢迎信息,并要求输入用户名:
    1.220-FileZilla Server version 0.9.18 beta  2. 3.220-written by Tim Kosse (Tim.Kosse@gmx.de)  4. 5.220 Please visit http://sourceforge.net/projects/filezilla/  6. 7.User (dell:(none)):  8. 客户端输入用户名robert,然后回车:
    ---> USER robert // ftp.exe生成FTP命令:USER,发送给服务器
    服务器要求输入密码:
    331 Password required for robert
    Password:
    客户端输入密码,然后回车:
    ---> PASS test // ftp.exe生成FTP命令:PASS,发送给服务器
    服务器通过密码验证:
    230 Logged on
    客户端键入ls命令
    ftp> ls
    ftp.exe生成FTP命令:PORT,告诉服务器客户端的随机端口是什么
    ---> PORT 127,0,0,1,4,173 // 127,0,0,1是IP地址,4 * 256 + 173 = 1197是随机端口号
    200 Port command successful // 服务器响应PORT命令
    ---> NLST // 客户端发出NLST命令,要求列出文件列表
    150 Opening data channel for directory list. // 服务器会在20端口与客户端的1197端口建立数据连接,传输数据,注意ls命令的结果是在“数据连接”中传输的
    Manual.txt // 只有一个文件
    226 Transfer OK // FTP服务器响应,传输完毕
    ftp: 收到 175 字节,用时 0.00Seconds 175000.00Kbytes/sec. // FTP客户端显示的传输结果
    下面客户端要求下载Manual.txt文件
    ftp> get Manual.txt
    ---> PORT 127,0,0,1,4,174 // 告诉服务器客户端新的随机端口4 * 256 + 174 = 1198
    200 Port command successful // // 服务器响应PORT命令
    ---> RETR Manual.txt // 告诉服务器下载Manual.txt文件
    150 Opening data channel for file transfer. // 服务器会在20端口与客户端的1198端口建立数据连接,传输数据
    226 Transfer OK // FTP服务器响应,传输完毕
    ftp: 收到 17319 字节,用时 0.09Seconds 192.43Kbytes/sec. // FTP客户端显示的传输结果
    最后客户端退出
    ftp> quit
    ---> QUIT // 发出QUIT命令
    221 Goodbye // 服务器最后响应
    仔细阅读上面的交互过程,可以发现,用户手工输入的一个FTP命令,可能会被ftp.exe处理成与FTP服务器的多次交互。如ls, get命令。
    要想详细了解FTP命令的细节,可以参见FTP的RFC,或者相关的资料,不过由于我们阅读源代码的主要目的不是研究FTP细节,而在于掌握高并发的网络编程的技术,所以,我们只以上面这个简单的FTP交互来看一下,在代码中这个过程是如何实现的。

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