微普FTP服务器项目手册.docx
《微普FTP服务器项目手册.docx》由会员分享,可在线阅读,更多相关《微普FTP服务器项目手册.docx(7页珍藏版)》请在冰豆网上搜索。
微普FTP服务器项目手册
微普信息人才培养基地
FTP服务器项目手册V1.0
微普信息学术部著
目录
第1章项目需求1
1.1引言1
1.1.1编写目的1
1.1.2范围1
1.2项目概述1
1.2.1产品描述1
1.2.2产品功能1
1.2.3一般约束2
1.3项目要求3
1.3.1ftp服务器设计成为一个守护进程3
1.3.2程序必须接受三个参数start,stop,restart3
1.3.3程序要捕获以下信号并做相应处理3
1.3.4要实现的FTP命令列表4
第1章项目需求
1.1引言
1.1.1编写目的
帮助学员了解项目的功能,明确需求功能中用户对系统要做什么的要求,了解需求中的各种业务规则。
1.1.2范围
软件的名称:
ftp服务器
软件的功能:
提供基本的上传下载文件。
1.2项目概述
1.2.1产品描述
ftp服务器的主要功能是上传下载文件以达到数据共享的目的。
在linux底下开发ftp服务器旨在帮助学员综合运用linux初级编程与linux高级编程所学到的知识。
如:
守护进程的编写,进程间通讯,管道,socket编程,文件I/O标准库函数与系统调用,以及文件权限管理等等。
1.2.2产品功能
必需要实现的软件功能表
模块
功能
说明
登录模块
本地用户登录验证及权限管理
匿名用户登录及权限管理
匿名用户目录限制在/var/ftp目录底下,
不能访问其它目录
修改权限
修改目录或文件权限
SITECHMOD
目录操作
添加目录
MKD或XMKD
删除目录
RMD或XRMD
重命名目录
RNFR,RNTO
返回父目录
CDUP
改变工作目录
CWD或XCWD
列出目录短清单
NLST
列出目录详细清单
LIST
文件操作
删除文件
DELE
重命名文件
RNFR,RNTO
文件传输模块
上传文件
STOR
下载文件
RETR
断点续传
REST,APPE
ftp文件传输两种工作模式
主动连接
PORT
被动连接
PASV
监控模块
统计服务器上传下载文件数,上传下载的字节数,服务器当前连接数
要求用共享内存与信号量来实现
限速
限制上传速度与下载速度
限制最大连接数
421Connectionrefused:
toomanysessions
限制每IP最大连接数,用哈希表实现
421Connectionrefused:
toomanysessionsforthisaddress.
进程模型
客户端每个连接,要求服务器用两个进程处理,其中一个进程处理控制连接,另一个进程处理文件传输,两个进程之间通讯要求用socketpair
1.2.3一般约束
编程语言:
使用标准C编程语言。
运行环境:
redhatlinux9
1.3项目要求
1.3.1项目要求用多文件,并编写Makefile来编译。
1.3.2ftp服务器设计成为一个守护进程
守护进程是在后台运行不受终端控制的进程。
1.3.3使用Shell脚本来实现start,stop,restart
假定程序可执行文件为myftpd,编写的Shell脚本为ftpdctrl.sh。
可以用./ftpdctrl.shstart来启动myftpd服务器,可以用./ftpdctrl.shstop停止,可以用./ftpdctrl.shrestart重启。
停止服务器的时候,要注意删除共享内存与信号量。
1.3.4程序要捕获以下信号并做相应处理
SIGHUP进行清理工作,共享内存与信号量
SIGQUIT进行清理工作,共享内存与信号量
SIGCHLD调用wait避免僵死进程,由于子进程退出,更改相应IP的连接数。
方法是,第一步根据进程ID,到第一个哈希表中找到该进程ID所对应的IP,第二步,根据IP找到该IP对应的连接数,然后把该连接数减1。
SIGPIPE忽略。
1.3.5控制连接进程与数据接收进程独立开来,两个进程通过Unix域协议通讯
控制连接进程接收到客户端的数据请求后,不自行处理,把这条命令分派给数据进程,让数据进程处理。
控制连接进程与数据进程之间的消息通讯用Unix域协议来实现。
也可以考虑数据进程用线程来实现。
1.3.6要求实现限速功能。
实现限制上传、下载速度,限制的速度大小通过配置文件配置。
1.3.7要求用配置文件来对项目的一些参数进行配置。
实现的时候,要求把文件中的配置信息一次性读到哈希表中。
1.3.8客户端空闲处理
如果服务端在一定时间(这个时间可以通过配置文件配置)没有收到客户端的请求,服务器端要退出为该客户端服务的进程(包括控制连接进程与数据进程),以便腾出资源为其他更多的客户端服务。
1.3.9要实现的FTP命令列表
命令类型
命令
功能说明
访问控制命令(用于指定访问控制标记)
USER
服务器上的用户名。
PASS
用户口令。
CWD,XCWD
改变工作目录。
CDUP
回到上一层目录(父目录)
QUIT
退出登录。
此命令终止USER,服务器关闭控制连接。
传输参数命令(用于在数据传输时设置默认值)
PORT
数据端口,主要向服务器发送客户数据连接的端口,格式为PORTh1,h2,h3,h4,p1,p2,其中32位的IP地址用h1,h2,h3,h4表示,16位的TCP端口号用p1,p2表示。
PASV
此命令要求服务器数据传输进程在随机端口上监听,进入被动接收请求的状态。
TYPE
文件类型,可指定ASCII码,二进制等。
服务命令(定义用户请求的文传输或文件系统功能)
RETR
获得文件
STOR
保存文件,向服务器传输文件。
如果文件已存在,原文件将被覆盖,如果文件不存在,则新建文件。
APPE
与STOR功能类似,但如果文件在指定路径已存在,则把数据附加到原文件尾部,如果不存在,则新建一个文件。
REST
重新开始,参数代表服务器要重新开始的那一点,它并不传送文件,而是略过指定点前的数据,此命令后应该跟其他要求文件传输的FTP命令。
RNFR,RNTO
重命名
ABOR
异常终止。
此命令通知服务中止以前的FTP命令和与之相关的数据传输。
如果先前的操作已完成,则没有动作,返回226;如果没有完成,返回225。
DELE
删除文件
RMD,XRMD
删除目录
MKD,XMKD
新建目录
PWD,XPWD
打印当前目录
LIST
列目录详细清单
SYST
获取系统信息
STAT
返回服务器状态,服务器上传的文件数,下载的文件数,上传的文件字节数,下载的文件字节数,当前连接数
SIZE
获得文件大小
HELP
帮助
NOOP
该命令不指定任何动作,只是要求服务器返回OK响应。
1.4项目中用到的技术点
1.4.1多进程编程
1.4.2匿名管道
1.4.3exec系列函数
1.4.4复制文件描述符函数(dup、dup2、fcntl)
1.4.5共享内存
1.4.6信号量
1.4.7基本套接字
1.4.8要求实现守护进程
1.4.9要求捕获信号
1.4.10要求用select来实现超时
1.4.11要求实现限制上传与下载速度(可以用线程来实现,也可以用setitimer来实现)
1.4.12要求统计服务器流量
1.4.13要求实现start,stop,restart
1.4.14系统参数要求在配置文件中配置
1.4.15权限控制,相应的用户只能访问相应用户的文件与文件夹,相应的用户所创建的文件夹与文件的拥有者与创建者一一对应