(P20)miniftpd项目实战20:ABOR的实现和NOOP命令和QUIT命令
文章目录
- 1.NOOP命令和QUIT命令
- 2.ABOR命令的实现
1.NOOP命令和QUIT命令
- 使用vsftpd来测试NOOP命令
服务器端收到NOOP命令后,没有进行任何操作,仅仅给客户端一个200的应答,NOOP的作用是:防止空闲断开,客户端会不定期的向服务器端发送NOOP命令,防止其空闲断开,因为其空闲计数时间idle_session_timeout又开始重新计算了
- eg:miniftpd20\session.c
static void do_noop(session_t *sess)
- eg:miniftpd20\session.c
static void do_noop(session_t *sess)
使用vsftp来测试quit命令
从服务器断开,给客户端一个221的响应
测试:
客户端连接后,服务端有3个进程
再连接一个客户端,应该是5个进程
ctrl r退出一个会话
退出一个会话,服务端给客户端一个221的应答
此时,服务端只剩下一个会话
2.ABOR命令的实现
功能综述
如果在在进行数据传输,那么客户端向服务器发送的ABOR命令是通过紧急模式来传输的,否则是按正常模式传输的。所以要处理ABOR命令,需要开启紧急模式接收数据。
服务器接收这个命令时可能处在两种状态:(1)FTP服务命令已经完成,或者(2)FTP服务命令还在执行中。
第一种情况,服务器关闭数据连接(如果数据连接是打开的)回应226代码,表示放弃命令已经成功处理。
第二种情况,服务器放弃正在进行的FTP服务,关闭数据连接,返回426响应代码,表示请求服务请求异常终止。然后服务器发送226响应代码,表示放弃命令成功处理。ABOR命令的功能是:正在传输文件的过程中,此时断开数据连接通道,但是却不会断开控制连接通道
用vsftpd来测试,vim /etc/vsftpd.conf
首先需要打开异步接收abor命令的能力
上传过程中,发送ABOR命令
接着,终止传输
此时,客户端会给服务端发送一个ABOR命令,服务端会先给客户端一个426的应答,然后再给一个226的应答,如果数据传输都完成了则只给客户端一个226的应答
如果没有数据传输,断开连接,则ABOR命令是通过正常传输通道来发送数据的,而不是通过紧急模式来发送数据的
- 整个流程如下:
(1)开启ctrl_fd接收带外数据功能
(2)安装信号SIGURG
(3)开启当前进程接收因ctrl_fd而产生的SIGURG信号(当ctrl_fd具有带外数据的时候,会产生SIGURG信号,该信号能被当前进程所接收,既然能被当前进程接收,则会调用handle_sigurg的函数)
(4)handle_sigurg
如果当前处于数据传输的状态,客户端发送一个ABOR命令,并且通过紧急模式发送过来的,此时就会产生SIGURG的信号,调用handle_sigurg,调用handle_sigurg中接收该带外数据,接收到数据之后判定是否是ABOR命令,如果是,就设定p_sess->abor_received = 1,并且断开数据套接字,否则回复一个500 unknow
(5)文件在传输过程中,可以是上传和下载,需要判定是否收到了ABOR异步命令,如果没有上传和下载完毕,则给客户端一个426的应答,再给一个226的应答
- eg:miniftpd20\ftpproto.c,miniftpd20\sysutil.c,miniftpd20\session.c,miniftpd20\session.h
static void do_pass(session_t *sess)
static void do_retr(session_t *sess)
void upload_common(session_t *sess, int is_append)void activate_oobinline(int fd);//紧急模式,带外数据的接收
void activate_sigurg(int fd);//此外,进程能够捕捉到一个信号SIGURG,以便它接收紧急数据activate_oobinline(sess->ctrl_fd);//控制fd开启oobinline,通过带外模式来接收数据
测试:
上传过程中,收到ABOR异步命令
上传过程中,断开连接
下载过程中,收到ABOR异步命令
下载过程中,断开连接
eg:miniftpd20\ftpproto.c
static void do_abor(session_t *sess)
- 测试:客户端直接终止,给客户端一个225的应答,只会终止数据连接通道,而不是控制连接通道,即nobody进程是不会终止的
(P20)miniftpd项目实战20:ABOR的实现和NOOP命令和QUIT命令相关推荐
- python项目实战:20行代码画一朵好看又有趣的小花花
2019独角兽企业重金招聘Python工程师标准>>> 前言 今天为大家介绍一个简单又有趣的小案例,图形绘画,自动帮你绘画一朵好看的小花花,你也可以改变它的属性,自己想象绘画,哈哈, ...
- 【SSH网上商城项目实战20】在线支付平台的介绍
之前已经完成了首页的显示,用户添加购物车,确认订单等功能,下面就是支付功能的开发了.用户确认了订单后会直接跳转到支付页面进行在线支付,在线支付需要第三方的接口,这一节主要介绍一些关于第三方支付的内容, ...
- C++教程网miniftpd项目实战
下载地址:http://feixueteam.net/thread-345-1-1.html
- 20天从入门到项目实战:学习小组C1任务训练实录
经过20天的探索,来自国防科技大学.北航.华工等49所高校小伙伴们组建了19个学习小组,其中大部分成员已经完成了C1的训练任务,包括修改游戏存档.网络接入等. 小组成员积极讨论,以布置的任务为主线,辅 ...
- 视频教程-20年Nodejs教程零基础入门到项目实战前端视频教程-Node.js
20年Nodejs教程零基础入门到项目实战前端视频教程 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有node/java/python,专注于服务 ...
- 20天掌握C语言,C语言零基础到项目实战,玩转C语言
一般来说,和其他编程语言相比,C/C++语言学起来会比较累,如果想达到项目开发的状态,更是需要花费很长时间的努力.那么,如何才能更好地把所学知识用到实际工作中去呢?今天小编就带大家来看看学习C/C++ ...
- 计算机视觉一些项目实战技术(续)
计算机视觉一些项目实战技术(续) PROTO-OBJECT BASED SALIENCY 在本项目中,提出一种新的方法来完成显著目标侦测的任务.与以往基于聚光灯注意理论的显著目标检测器相比,遵循基于对 ...
- 计算机视觉一些项目实战技术
计算机视觉一些项目实战技术 SELECTIVE SEARCH FOR OBJECT LOCALISATION 需要多种策略来查找上述图像中的所有对象.勺子在桌子上的沙拉碗里.因此,图像本质上是层次性的 ...
- 【Rsync项目实战一】备份全网服务器数据
目录 [Rsync项目实战]备份全网服务器数据 [企业案例] 1.1 环境部署 1.2 开始部署backup服务器:Rsync服务端过程: 1.3 开始部署nfs01服务器:Rsync客户端过程: [ ...
最新文章
- Hibernate 性能优化之二级缓存
- python数据分析工资_python3对拉勾数据进行可视化分析的方法详解
- javascript 调用c#变量实例
- 2020ICPC(小米邀请赛2) - Knapsack(贪心+dp)
- Raphael学习笔记(2)--绘图(基本图形)
- 夜神模拟器模拟安卓测试_使用模拟进行测试
- postgis创建空间数据库(pgadmin4)
- Linux工作笔记-使用SCP文件协议(SSH协议22端口)使Windows与Linux互传文件
- openEuler Summit 带你解锁开源与操作系统的不解之缘
- 以太坊上DeFi协议总锁仓量突破190亿美元
- 单链表的顺序查找c语言,单链表(C语言)
- tp框架like模糊查询报错
- [深度大牛]·计算机视觉王者何凯明
- 2018五大网络小说在线阅读APP推荐
- Nginx优化---防盗链--网页缓存--网页压缩--日志分割
- 信度和效度经典例子_信度与效度有什么关系?
- 用python写个脚本把QQ空间多年动态删了
- 关于selenium获取网页下一页的点击事件
- VS 点击页面自动定位到解决方案资源管理器目录位置
- 字符集和编码 UNICODE、ANSI、UTF-8、GB2312 都是什么鬼
热门文章
- 测试领域的大佬博客(个人收藏向)
- 红绿灯c语言程序及仿真图,AT89C51单片机十字路口交通灯设计(仿真、keil源代码以及实物图)...
- java许愿墙_许愿墙的实现
- 被称为“核弹级别”的OpenSSL漏洞
- Kernel源码笔记之调度:4.Fork系统调用
- HTC手机鉴别终极宝典
- 你玩的是互联网还是寂寞
- ReactNative进阶(三十一): IoC 框架 InversifyJS 解读
- POJ 3054 High Spies 笔记
- Vue.js(十) element-ui PC端组件库