文章目录

  • 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命令相关推荐

  1. python项目实战:20行代码画一朵好看又有趣的小花花

    2019独角兽企业重金招聘Python工程师标准>>> 前言 今天为大家介绍一个简单又有趣的小案例,图形绘画,自动帮你绘画一朵好看的小花花,你也可以改变它的属性,自己想象绘画,哈哈, ...

  2. 【SSH网上商城项目实战20】在线支付平台的介绍

    之前已经完成了首页的显示,用户添加购物车,确认订单等功能,下面就是支付功能的开发了.用户确认了订单后会直接跳转到支付页面进行在线支付,在线支付需要第三方的接口,这一节主要介绍一些关于第三方支付的内容, ...

  3. C++教程网miniftpd项目实战

    下载地址:http://feixueteam.net/thread-345-1-1.html

  4. 20天从入门到项目实战:学习小组C1任务训练实录

    经过20天的探索,来自国防科技大学.北航.华工等49所高校小伙伴们组建了19个学习小组,其中大部分成员已经完成了C1的训练任务,包括修改游戏存档.网络接入等. 小组成员积极讨论,以布置的任务为主线,辅 ...

  5. 视频教程-20年Nodejs教程零基础入门到项目实战前端视频教程-Node.js

    20年Nodejs教程零基础入门到项目实战前端视频教程 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有node/java/python,专注于服务 ...

  6. 20天掌握C语言,C语言零基础到项目实战,玩转C语言

    一般来说,和其他编程语言相比,C/C++语言学起来会比较累,如果想达到项目开发的状态,更是需要花费很长时间的努力.那么,如何才能更好地把所学知识用到实际工作中去呢?今天小编就带大家来看看学习C/C++ ...

  7. 计算机视觉一些项目实战技术(续)

    计算机视觉一些项目实战技术(续) PROTO-OBJECT BASED SALIENCY 在本项目中,提出一种新的方法来完成显著目标侦测的任务.与以往基于聚光灯注意理论的显著目标检测器相比,遵循基于对 ...

  8. 计算机视觉一些项目实战技术

    计算机视觉一些项目实战技术 SELECTIVE SEARCH FOR OBJECT LOCALISATION 需要多种策略来查找上述图像中的所有对象.勺子在桌子上的沙拉碗里.因此,图像本质上是层次性的 ...

  9. 【Rsync项目实战一】备份全网服务器数据

    目录 [Rsync项目实战]备份全网服务器数据 [企业案例] 1.1 环境部署 1.2 开始部署backup服务器:Rsync服务端过程: 1.3 开始部署nfs01服务器:Rsync客户端过程: [ ...

最新文章

  1. Hibernate 性能优化之二级缓存
  2. python数据分析工资_python3对拉勾数据进行可视化分析的方法详解
  3. javascript 调用c#变量实例
  4. 2020ICPC(小米邀请赛2) - Knapsack(贪心+dp)
  5. Raphael学习笔记(2)--绘图(基本图形)
  6. 夜神模拟器模拟安卓测试_使用模拟进行测试
  7. postgis创建空间数据库(pgadmin4)
  8. Linux工作笔记-使用SCP文件协议(SSH协议22端口)使Windows与Linux互传文件
  9. openEuler Summit 带你解锁开源与操作系统的不解之缘
  10. 以太坊上DeFi协议总锁仓量突破190亿美元
  11. 单链表的顺序查找c语言,单链表(C语言)
  12. tp框架like模糊查询报错
  13. [深度大牛]·计算机视觉王者何凯明
  14. 2018五大网络小说在线阅读APP推荐
  15. Nginx优化---防盗链--网页缓存--网页压缩--日志分割
  16. 信度和效度经典例子_信度与效度有什么关系?
  17. 用python写个脚本把QQ空间多年动态删了
  18. 关于selenium获取网页下一页的点击事件
  19. VS 点击页面自动定位到解决方案资源管理器目录位置
  20. 字符集和编码 UNICODE、ANSI、UTF-8、GB2312 都是什么鬼

热门文章

  1. 测试领域的大佬博客(个人收藏向)
  2. 红绿灯c语言程序及仿真图,AT89C51单片机十字路口交通灯设计(仿真、keil源代码以及实物图)...
  3. java许愿墙_许愿墙的实现
  4. 被称为“核弹级别”的OpenSSL漏洞
  5. Kernel源码笔记之调度:4.Fork系统调用
  6. HTC手机鉴别终极宝典
  7. 你玩的是互联网还是寂寞
  8. ReactNative进阶(三十一): IoC 框架 InversifyJS 解读
  9. POJ 3054 High Spies 笔记
  10. Vue.js(十) element-ui PC端组件库