Watch 4 Star 0 Fork 0

殿下,请小心! / curriculum_designC

Join us
Explore and code with more than 2 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Without author's permission, this code is only for learning and cannot be used for other purposes.
综合课程设计 基于Linux下的FTP服务器实现 spread retract

Clone or download
Loading...
readme.txt
git项目链接:
	http://git.dormforce.net/ftpgrp/ftppro.git
	共有C语言代码2649行
		empire@Lenovo-V580c:ftppro$ cd server/
		empire@Lenovo-V580c:server$ ./lines 
		Total Lines: 1492
		empire@Lenovo-V580c:server$ cd ../include/
		empire@Lenovo-V580c:include$ ./line 
		Total Lines: 203
		empire@Lenovo-V580c:include$ cd ../utils/
		empire@Lenovo-V580c:utils$ ./line 
		Total Lines: 245
		empire@Lenovo-V580c:utils$ cd ../client/
		empire@Lenovo-V580c:client$ ./lines 
		Total Lines: 709
		empire@Lenovo-V580c:client$
	运行环境:
		任一64位Ubuntu,Debian,Redhat系列内核2.6版本以上的的Linux,Unix发行版本

根目录文件说明:
	client/			客户端程序
		client		客户端开发测试脚本文件
		client.c	客户端主程序文件
		client.h	客户端主程序文件头文件,含全局变量	
		include		链接文件,实为上一层的incldue的文件夹
		kmod.c		客户端核心模块实现文件
		kmod.h		客户端核心模块头文件
		lines		统计脚本链接文件
		utils		链接文件,实为上一层的utils的文件夹
	ftpdctl		用户信息管理
	include/	公共头文件及加密工具,工具函数头文件
		const.h		系统常量
		file.h		文件操作头文件
		header.h	公共头文件
		line		统计脚本链接文件
		md5.h		md5校验值算法头文件
		status.h	自定义ftp传输协议状态字定义文件
		utils.h		工具函数头文件
	lines.sh	统计.c,.h文件代码行数脚本
	result/		运行结果截图展示及流程图(flow_diagram)
		flow_diagram	服务器端,客户端流程图文件,实际功能更强
		new		新运行截图
		old		上一版本运行截图
	temp/		测试时使用的日志产生文件夹
	docs/		实验报告及时间任务分配
		见名思意
	ftp_root/	实际用于测试的ftp根目录
		bin/	二进制文件
		docx/	文档文件
		uploads/上传目录
	install		系统安装shell脚本文件
	readme.txt	使用说明文档
	server/		服务器端
		auth.c		认证用户信息操作
		core.c		服务器端核心函数
		deamon.c	将服务设置成deamon后台运行,写pid文件
		ftpd.conf	服务器配置文件示例	
		lines		统计脚本链接文件
		server.c	服务器主函数文件
		user.c		用户信息操作
		users		用户信息文件
		auth.h		认证信息头文件
		core.h		核心头文件		
		deamon.h	设备头文件
		include		链接文件,实为上一层的incldue的文件夹
		server		服务器端开发测试脚本文件
		server.h	服务器头文件
		user.h		用户头文件
		utils		链接文件,实为上一层的utils的文件夹
	utils/		include/文件夹下头文件对应的实现文件
		file.c		文件操作实现文件
		lines		统计脚本链接文件统计脚本链接文件
		md5.c		md5函数实现文件
		utils.c		工具函数实现文件


任务分配说明:
		[学号]			[姓名]	[联系方式]
	服务器端:
		2013220201025	王树根	18780142663
			FTP自定义传输协议商定,服务器整体框架设计,shell脚本编写
		2013220202005	刘伟科	15036366635
			分析报文,实现命令ls,cd,pwd,get,put,help等服务器端命令
	客户端:
		2012224020006	熊  桀	13980456462
			用户验证模块,处理非法用户请求,客户端及本地命令处理
	系统测试及文档编写:
		2012221040029	李媛媛	18380422636
			系统测试,实验报告文档编写,部分文件管理处理
		2012221040030	蒋力维	18380422616
			系统测试,答辩ppt制作,部分命令处理分析

系统设计说明:
	概述:
		服务器端采用优于select的epoll IO复用函数通过非阻塞模式进行连接处理,数据连接上采用文件缓冲及socket缓冲双重缓冲方式加快数据传输速率,并使用优于进程的pthread线程进行多客户端请求处理,通过互斥量加锁机制保证线程同步,解决数据边界问题;客户端根据解析出的命令是否出错,是否为本地命令,是否为权限命令而选取不同策略进行处理,决定是否发给服务器端处理,以节省服务器端连接资源,提高效率,每次发送命令前先查询服务器是否运行的状态,以便远程服务器关闭连接时能得到及时响应,客户端关闭连接时,像远程服务器发送退出指令,保证了服务器能及时断开失效的客户端连接,回收资源
	服务器端:
		检查系统环境(64位)(system_detect)
		加载配置文件(load_config)
		加载用户信息文件(load_user)
		注册终端结束符(当Ctrl+C被按下时,随时回收系统资源)(key_control_c_register)
		设置快速重启,使用SO_REUSEADDR选项以便服务能快速重启(quick_restart)
		打开Socket,绑定并监听端口(bind)
		将进程设置为deamon,后台运行(set_deamon)
		初始化epoll例程,并监视serv_sock(epoll_init)
		进入epoll等待(epoll_wait)
		客户端发起新连接时,启用server_handler,并将客户端socket暂时加入已认证列表(server_handler)
		客户发起认证连接,认证通过后记录其用户名及权限(user_auth)
		提供权限命令服务(并根据相应操作写日志)(set_log_to_file)
	
	客户端:
		检查系统环境(64位)(system_detect)
		发起认证(auth_success)
		给出命令提示符(parse_cmd)
		使用提示的权限命令及!开头的任意本地命令(server_alive_query,,,,)

安装(程序需在64位系统上运行):
	简单使用:
		更改ftppro/server/ftp.conf文件配置项,以'#'开头的行为注释,并拷贝到/etc/ftpd.d/目录,加上读权限
		
		配置文件=>配置项
			服务器目录:	可使用相对路径或绝对路径
				root_path=/home/empire/projects/ftppro/files
			日志文件目录:	需要进程所有者对该目录用有写权限,生成的日志文件格式为ftp20141214.log,按天生成日日志文件,可扩展为系统日志轮替
			日志格式:		时间		ip:port		message
				log_path=/tmp
			用户配置文件位置:
				user_file=/home/empire/users
			监听端口:		默认采用电子科大建校年份1956
				port=1956
			最大客户端连接数:
				max_client=256
			客户端超时:	(该参数实际未使用)
				time_out=900000
			最大线程数:	(该参数实际未使用)
				max_thread=256
		用户文件=>格式说明(匿名用户anonymous无需配置项说明,已默认)
			用户名:密码:可使用权限命令(可选权限命令为ls,cd,ge,put,pwd,bye)
			例:empire:21232f297a57a5a743894a0e4a801fc3:ls,cd,get,put,pwd,bye,help
		
		注:配置文件名默认位于/etc/ftpd.d/目录,可在ftppro/server/core.h第21行
		修改配置文件位置,建议使用绝对路径,需重新编译,更改参数后
		
		服务器端:
			cd [当前目录]/ftppro/server
			chmod u+x server
			./server
		启动后无任何提示,进入等待状态
		
		客户端"
			cd [当前目录]/ftppro/client
			chmod u+x client
			./client
		提示输入用户名及密码,用户名默认问当前登录用户,直接回车可跳过,密码输入时关闭了回显
		
		登入成功后将有提示ftp>
			能够使用的命令
		
部署安装:
	将文件拷贝至任意目录
	chmod u+x install
	sudo ./install

	运行`ftpd start`将启动服务器端ftp程序
	可运行运行`ftpc {host|domain}[:port]`将启动客户端连接
	设计的命令有
		ls	使用Linux的ls -l命令通过调用popen将服务器shell执行结果以流的方式展现给客户端
		cd	将已登录的用户的当前工作路径切换到cd后的目录,支持相对路径及绝对路径(相对于服务器根目录)
			cd path, cd /path
		get 下载一个文件,支持相对路径和绝对路径
			get file, get /path/file
		put	上传一个文件,支持相对路径和绝对路径(系统的绝对路径)
			put file, put /path/file
		pwd	显示当前工作路径
			pwd
		help
			显示能使用的命令
		bye
			退出程序,向服务器发送注销请求,以便服务器清除即关闭对应文件描述符(客户端套接字)

用户信息增改:
	ftpdctl

	Usage: ftpdctl [Option]
	  -a add a ftp user
	  -m modify a ftp user
	  -r remove a ftp user
	  -h help

	例:
		ftpdctl -a {username} #增加用户username,花括号表示必填
		ftpdctl -r {username} #删除用户username

用户信息可选权限命令说明:	ls,cd,pwd,get,put,bye,help

认证说明(auth_list):
	非anonymous用户,anonymous用户:
		(auth_list)记录其套接字号,存储IPv4,端口号,用户名及用户的权限
		非匿名账号权限由user_list中权限信息给出(非首节点)
		匿名用户权限由user_list首节点的权限信息给出
	不在用户列表且非anonymous用户不予连接

Comments ( 0 )

Sign in for post a comment

C
1
https://gitee.com/bigempire/curriculum_design.git
git@gitee.com:bigempire/curriculum_design.git
bigempire
curriculum_design
curriculum_design
master

Help Search