(P20)miniftpd项目实战20:ABOR的实现和NOOP命令和QUIT命令

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进程是不会终止的
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值