Miniftp项目
小菜鸡的蜕变之路
长路漫漫,若能坚持,未来可期,加油~
展开
-
Miniftp 项目学习笔记(一) 项目简介
一、项目实现目标 实现不同主机之间高效的文件传输(屏蔽不同主机之间不同的文件系统的差异)。二、Ftp协议简介 FTP工作在TCP/IP协议的应用层,其传输层使用的是TCP协议,基于C/S模式工作。三、FTP工作原理1、启动FTP 在客户端,通过交互的用户界面,客户从终端输入启动FTP的用户交互式命令2、 建立控制连接 客户端TCP协议...原创 2019-08-14 20:48:43 · 329 阅读 · 0 评论 -
Miniftp 项目学习笔记(二) 系统框架搭建
一、框架简介common 模块 <头文件定义> sysutil 模块 <公有工具定义> miniftp 模块 <检测是否root启动,主进程完成客户端的连接,以及子进程的创建, 开启会话> session 模块 <会话结构的定义,实现会话函数,创建子进程,区分出ftp进程和nobody进程,实现ftp与nobody之间的通讯连接,更改nobody...原创 2019-08-14 21:55:41 · 347 阅读 · 0 评论 -
项目功能(一):配置文件的解析
①将配置文件以只读方式打开②一行行读取配置文件过滤不匹配的行(空行、注释行、空格行); 由于fgets函数读取的一行字符包含'\r\n',需要将其去掉; 将解析的配置项文件保存在本地变量中 去掉一行配置字段左边的空格(配置字段左边可能为空) 将配置字段key和value分开(根据等号进行分隔),将key保存在数组key中,值保存在数组value中 如果value长度为0,则表...原创 2019-08-20 21:15:31 · 491 阅读 · 0 评论 -
项目功能(三):实现FTP内部标准命令(命令映射)
实现FTP内部标准命令USER、PASS、PORT、PASV、LIST、STOR、RETRUSER和PASS上次已经分析过了,这里就不再分析:1、命令映射typedef struct ftpcmd{ const char *cmd; //命令字符串 void (*cmd_handler)(session_t *sess); //函数指针} ftpcmd_t;...原创 2019-08-20 21:16:17 · 1042 阅读 · 0 评论 -
项目功能(二):用户鉴权登录功能的实现
用户鉴权登录功能的实现1、USER实现代码如下:static void do_user(session_t *sess){ //USER naruto struct passwd *pw = getpwnam(sess->arg); if(pw == NULL) { //用户不存在 //writen(sess->ctrl_fd, "530 ...原创 2019-08-21 10:20:10 · 1626 阅读 · 0 评论 -
项目功能(四):实现FTP两种传输模式
1、主动模式(port):(1)主动模式工作过程① 客户端向服务器端发送PORT命令客户端创建数据套接字 客户端绑定一个临时端口bind(0) 客户端在套接字上监听listen(fd) 将IP与端口格式化为h1,h2,h3,h4,p1,p2② 服务器端以200响应服务器端解析客户端发过来的IP与端口暂存起来,以便后续建立数据连接③ 客户端向服务...原创 2019-08-21 22:00:01 · 895 阅读 · 0 评论 -
Miniftp 项目学习笔记(三) 字符串模块
我们已经对miniFTP基础框架进行了搭建,这次继续进行往上加代码,这次主要还是将经历投射到handle_child()服务进程上来,其它的先不用关心:而它主要是完成FTP协议相关的功能,所以它的实现放在了ftpproto.c,目前连接成功之后效果是:其中"USER webor2006"后面是包含"\r\n"的,FTP的协议规定每条指令后面都要包含它,这时handle_child(...转载 2019-08-16 20:35:17 · 167 阅读 · 0 评论 -
Miniftp 项目学习笔记(四)封装参数配置模块
上一次对字符串工具模块进行了封装,这次主要是对"参数配置模块"的封装,FTP中有很多配置相关的选项,不可能硬编码到代码中,而应该将它们配置到配置文件当中,像vsftpd的配置文件如下:而对于miniftpd所有的参数配置项如下:对于上面这些变量应该是与对应的配置项进行一一对应的,所以需要定义三张表格来进行一一对应: 配置文件中的配置项与配置项变量对应关系表 ...转载 2019-08-16 20:49:51 · 194 阅读 · 0 评论 -
Miniftp 项目学习笔记(五)用户登录的验证
用客户端登录服务器:连接一下我们暂时实现的miniftpd,看看效果:首先,启动miniftpd:./miniftpd连接miniftpd:接下来实现它,与协议相关的模块都是在ftpproto.c中完成的,目前的代码如下:#include"ftpproto.h"#include"sysutil.h"#include "str.h"void hand...原创 2019-08-17 11:55:32 · 350 阅读 · 0 评论