FTP协议分析(主动模式和被动模式)

news2024/12/22 22:10:06

 今天本来计划分析下suricata中协议识别和解析的代码的,准备先从ftp协议开始看,不过看了一会儿代码后,还是觉得有必要对ftp协议的细节先熟悉熟悉。

目录

1、FTP环境搭建工具

2、FTP协议介绍

3、FTP文件操作命令列表

4、FTP请求码列表

5、FTP响应码列表

6、FTP两种工作模式

6.1 FTP主动模式流程

6.1.1 IPv4主动模式报文交互流程

6.1.2 IPv6主动模式报文交互流程

6.2 FTP被动模式流程

6.2.1 IPv4被动模式报文交互流程

6.2.2 IPv6被动模式报文交互流程


1、FTP环境搭建工具

1)FTP客户端:

  • Windows系统:FlashFXP 或者 浏览器 或者 文件管理器

  • Linux系统:ftp命令

2)FTP服务器:

  • Windows系统:  FileZilla Server 或者 3CDaemon(不支持IPv6)或者 自带的IIS

  • Linux系统:vsftpd

本篇文章,我的FTP客户端和服务器都是在windows系统上。

2、FTP协议介绍

 FTP协议(File Transfer Protocol,文件传输协议)是一种用于计算机之间传输文件的标准网络协议。它允许用户在不同的计算机之间进行文件传输和共享。通过FTP协议,用户可以通过网络连接到远程计算机上的FTP服务器,并进行文件上传、下载和管理。

FTP协议的功能非常简单,它不仅可以支持不同平台之间的文件传输,而且还支持多用户和多任务处理。FTP客户端和FTP服务器分别作为不同的实体进行交互。FTP客户端掌握了可以在一个远程服务器上实现的文件系统,而FTP服务器则允许用户上传、下载、删除和修改文件。FTP协议主要有两种模式:主动模式和被动模式。主动模式中,客户端向服务器发送命令,并侦听服务器发送的数据连接。被动模式中,服务器向客户端发送端口号,并侦听客户端连接的数据。FTP协议默认使用TCP协议传输,其控制连接是通过TCP的21端口,数据连接则是通过TCP的20端口。

需要注意的是,FTP协议并没有对数据进行加密处理,因此在数据传输过程中存在安全问题。有一些扩展了FTP协议的协议(比如Secure File Transfer Protocol、SSH File Transfer Protocol等),则包含了加密处理来保证数据的安全传输。

3、FTP文件操作命令列表

序号

命令

 说明

1

 ls

 显示服务器上的目录

2

 get

从服务器下载指定文件到客户端

3

 put

 从客户端传送指定文件到服务器

4

 open

 连接ftp服务器

5

 quit

 断开连接并退出ftp服务器

6

 cd directory

 改变服务器的当前目录为directory

7

 lcd directory

 改变本地的当前目录为directory

8

 bye

 退出ftp命令状态

9

 ascii

 设置文件传输方式为ASCII模式

10

 binary

 设置文件传输方式为二进制模式

11

 !

 执行本地主机命令

12

 cd

 切换远端ftp服务器上的目录

13

 cdup

 上一层目录

14

 close

 在不结束ftp进程的情况下,关闭与ftp服务器的连接

15

 delete

 删除远端ftp服务器上的文件

16

 get

 下载

17

 hash

 显示#表示下载进度

18

 mdelete

 删除文件,模糊匹配

19

 mget

 下载文件,模糊匹配

20

 mput

 上传文件,模糊匹配

21

 mkdir

 在远端ftp服务器上,建立文件夹

22

 newer

 下载时,检测是不是新文件

23

 prompt

 关闭交互模式

24

 put

 上传

25

 pwd

 显示当前目录

Linux系统上ftp看到的操作命令:

4、FTP请求码列表

序号

请求码

功能

1

ABOR

终止上一个FTP命令

2

ACCT

指定FTP登录的用户账户

3

ALLO

分配指定长度的服务器存储空间

4

APPE

在指定文件后追加数据

5

CDUP

返回到上一级目录

6

CWD

更改工作目录

7

DELE

删除指定的文件

8

EPSV

进入扩展被动模式(IPv6被动模式用)

9

HELP

查询FTP服务器的帮助信息

10

LIST

列出当前目录或指定目录下的文件列表

11

MKD

创建新目录

12

APPE

在指定文件后追加数据

13

MODE

设置文件传输模式

14

FEAT

获取服务器支持的FTP功能列表

15

MLSD

列出指定目录下的文件列表

16

MLST

显示指定文件/目录的属性

17

NLST

列出当前目录或指定目录下的文件名

18

NOOP

空操作,用于保持控制连接的活跃状态

19

PASS

指定FTP登录的用户密码

20

PASV

进入被动模式,等待数据传输连接(IPv4被动模式用)

21

PORT

定义客户端的数据传输端口(IPv4主动模式用)

22

PWD

显示当前工作目录

23

QUIT

结束FTP会话

24

REIN

重新初始化登录状态连接

25

REST

设置数据传输的起始点

26

RETR

下载文件

27

RMD

删除指定的目录

28

RNFR

重命名的原始文件名

29

RNTO

重命名的目标文件名

30

SITE

发送特定于服务器的命令

31

SIZE

查询指定文件的大小

32

SMNT

挂载指定文件系统

33

STAT

显示FTP服务器的状态

34

STOR

上传文件

35

STOU

储存文件到服务器名称上

36

STRU

设置文件结构

37

SYST

获取服务器的操作系统类型

38

TYPE

指定数据传输的类型,如二进制、ASCII等

39

USER

指定FTP登录的用户名

40

EPRT

定义服务器的数据传输端口(IPv6主动模式用)

5、FTP响应码列表

序号

响应码

功能

1

110

指示服务器正在等待客户端发送REST命令来恢复中断的传输

2

120

指示服务器需要一些时间以使服务准备就绪,并在n分钟后告知客户端

3

125

指示数据连接已经处于打开状态,并且文件传输即将开始

4

150

指示文件状态正常,即将打开数据连接

5

200

指示操作成功完成

6

202

指示命令未实现

7

211

指示服务器系统状态

8

212

指示服务器目录状态

9

213

指示服务器文件状态

10

214

指示服务器帮助信息

11

215

指示服务器系统类型

12

220

指示服务已经准备就绪等待新的用户

13

221

指示服务正在关闭控制连接

14

225

指示数据连接已打开,并且没有正在进行的文件传输

15

226

指示数据连接已关闭

16

227

指示进入被动传输模式(IPv4被动模式用)

17

229

进入扩展被动传输模式,包含IP地址和端口号(IPv6被动模式用)

18

230

指示用户已登录

19

250

指示文件操作已成功完成

20

257

指示已经创建一个新的路径名称

21

331

指示服务需要密码进行认证

22

332

指示服务需要帐户名进行认证

23

350

指示文件操作需要进一步的信息

24

421

指示服务因某个原因无法可用

25

425

指示无法打开数据连接

26

426

指示数据连接已关闭

27

450

指示文件不可用

28

451

指示操作被中止

29

452

指示指定的存储分配不足以处理该命令

30

500

指示语法错误,或者命令无法理解

31

501

指示参数语法错误

32

502

指示命令未实现

33

503

指示服务不可用

34

504

指示命令没有完成如何操作,需要更多信息

35

530

指示需要进行身份验证

36

532

指示存储文件需要进行完整性检查

37

550

指示文件不可用

38

551

指示归档/备份操作未执行

39

552

指示超过存储限制

40

553

指示操作未执行,文件名不合法

6、FTP两种工作模式

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式(如果是IPv6,则分别是EPRT和EPSV)。主动被动都是相对于服务器来说的。

主动方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令(IPv4)或者EPRT命令(IPv6)告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。

被动方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端通过PASV命令(IPv4)或者EPSV命令(IPv6)服务器想要使用被动模式, 服务器回应响应码227(IPv4)或者229(IPv6)告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。

6.1 FTP主动模式流程

6.1.1 IPv4主动模式报文交互流程

从上图IPv4主动模式的报文可以看到,客户端172.16.1.1发送PORT命令,告诉服务器172.16.1.2,“我要使用主动模式,你来连我的ip 172.16.1.1,端口1135”,服务器回应响应码200表示同意,然后数据通道就主动使用20端口去连客户端的1135端口。

6.1.2 IPv6主动模式报文交互流程

从上图IPv6主动模式的报文可以看到,客户端2000::58发送EPRT命令,告诉服务器2000::57,“我要使用主动模式,你来连我的ipv6地址 2000::58,端口1194”,服务器回应响应码200表示同意,然后数据通道就主动使用49428端口去连客户端的1194端口。

6.2 FTP被动模式流程

6.2.1 IPv4被动模式报文交互流程

从上图IPv4被动模式的报文可以看到,客户端172.16.1.1发送PASV命令,告诉服务器172.16.1.2,“我要使用被动模式,你告诉我端口,我来连你”,服务器回应响应码227,告诉客户端"我的ip地址是172.16.1.2,端口是49183",然后数据通道时,客户端就使用随机端口1082主动去连服务器的49183端口。

6.2.2 IPv6被动模式报文交互流程

从上图IPv6被动模式的报文可以看到,客户端2000::58发送EPSV命令,告诉服务器2000::57,“我要使用被动模式,你告诉我端口,我来连你”,服务器回应响应码229,告诉客户端"我的ip地址是2000::57,端口是49490",然后数据通道时,客户端就使用随机端口1827主动去连服务器的49418端口。

好了,ftp协议流程分析就到这里了。具体里面的登录、输入用户名密码、列出目录这些交互流程,这里就不讲了,直接看报文就可以看懂了,相对于http协议来说,ftp还是简单很多的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/643319.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

硬件测试---相位噪声测试

一:相位噪声的概述 相位噪声是指信号或振荡器在频率上的相位变动或不稳定性。它是相对于理想稳定振荡器的相位偏离或波动的度量。相位噪声的存在意味着信号的相位在时间上会有微小的变化或扰动,这可能对某些应用产生负面影响。 相位噪声通常以相位噪声密…

【电子技术综合设计】数字钟(包含计数模块、12/24进制切换模块以及闹钟模块)

工程文件: https://pan.baidu.com/s/1PnYd2mwMUf0tgxczdcl2MA 提取码: ihrk B站演示: 【电子技术综合设计】数字电子时钟(包含计数模块、12/24进制切换模块以及闹钟模块)_哔哩哔哩_bilibili 一、设计要求 1. 24小时制的时、分…

基于Java汽车在线租赁管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

吴恩达老师《机器学习》课后习题2之逻辑回归(logistic_regression)

逻辑回归-线性可分 用于解决输出标签y为0或1的二元分类问题。判断邮件是否属于垃圾邮件?银行卡交易是否属于诈骗?肿瘤是否为良性?等等。 案例:根据学生的两门学生成绩,建立一个逻辑回归模型,预测该学生是否会被大学录…

一、深度学习引言

文章目录 一、机器学习中的关键组件1. 数据2. 模型3. 目标函数4. 算法 二、各种机器学习问题1. 有监督学习1.1 回归1.2 分类1.3 标记问题1.4 搜索1.5 推荐系统1.6 序列学习 2. 无监督学习3. 与环境互动4. 强化学习 三、深度学习的发展 一、机器学习中的关键组件 1. 数据 数据…

MM32F3273G8P火龙果开发板MindSDK开发教程17 -U8g2库的移植

MM32F3273G8P火龙果开发板MindSDK开发教程17 -U8g2 OLED库的移植 1、U8g2简介 手头正好有一块0.96寸的OLED屏,驱动芯片为ssd1306,心想怎么才能显示更为炫彩的图像。无意间,接触到U8g2图形库,遂决定将其移植到自己的工程中。 U8g…

2023软件测试面试避坑指南

今年2023整体IT行业不景气,大厂小厂裁员不断,因岗位稀缺,匹配性,竞争大,被裁以后面临房贷、车贷等压力,不得不看下银行卡,还能够支撑多久,得赶紧地找下一家,但偏偏事与愿…

深入学习 Mybatis 的四大组件源码

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌ Java知识图谱点击链接:体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收…

JavaScript之ES6高级语法(一)

本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。 ES6高级语法(一) 前言一、垃圾回收机制(Garbage Collection)1.1、引用计数法…

看病排队问题

目录 一、代码 二、功能函数介绍 三、运行截图 一、代码 #define _CRT_SECURE_NO_WARNINGS 1//不用VS删除这一行 #include<stdio.h> #include<stdlib.h> struct LinkQueue {int data;struct LinkQueue* next; };struct Node {LinkQueue* frount;LinkQueue* re…

docker无法启动 -> 缺少libseccomp

systemctl status docker.servicejournalctl -u dockeryum install -y libseccomplibseccomp是一个用于Linux操作系统的安全计算模式&#xff08;seccomp&#xff09;的用户空间库。seccomp是一种Linux内核特性&#xff0c;允许限制进程可以执行的系统调用&#xff0c;以增加应…

C语言中的基本数据类型

C语言中的基本数据类型分别为以下几种 整型、浮点型、字符类型 整型又分为整型int、短整型short、长整型long 浮点型分为单精度浮点型float、双精度浮点型double 1、短整型short 2.整型 3.长整型 短整型、长整型、整形都是表示整形的&#xff0c;并且输出结果也都为10&…

教你如何批量关闭窗口,省时又省力!

哈喽哈喽&#xff0c;大家好&#xff0c;今天我们来分享一个小功能。 在实际的应用场景中&#xff0c;我们可能需要打开多个窗口&#xff0c;在关闭窗口时&#xff0c;逐个关闭窗口可能比较繁琐&#xff0c;而且有些窗口虽然不再显示了&#xff0c;但可能是隐藏的。在这种情况…

Flutter 库:强大的工具及扩展——nb_utils

Flutter 库&#xff1a;强大的工具及扩展——nb_utils 文章目录 Flutter 库&#xff1a;强大的工具及扩展——nb_utils一、概述1、简介2、功能3、官方资料 二、基本使用1、安装2、基本使用第一步&#xff1a;在 main.dart 中初始化第二步&#xff1a;在您的 MaterialApp 或 Cup…

java的字符输入流

字符流的底层也是字节流。字符流字节流字符集。 特点是输入流一次读一个字节&#xff0c;遇到中文时&#xff0c;一次读多个字节&#xff08;读多少个与字符集有关&#xff09;&#xff1b;输出流底层会把数据按照指定的编码方式进行编码&#xff0c;变成字节再写到文件中。 字…

15个提效的设计类AI生成工具推荐

最近越来越多的AI工具如雨后春笋般涌现。我相信很多设计师会开始使用人工智能工具来帮助我们提高工作效率。 本文整理了15种易于使用的设计类AI工具 即时 AI 即时 AI 是通过自然语言描述&#xff0c;快速生成可编辑的 UI 设计稿的设计工具。 输入文字描述后&#xff0c;即可…

C语言:使用函数完成整型数组的打印、元素逆置、初始化

题目&#xff1a; 创建一个整形数组&#xff0c;完成对数组的操作 1. 实现 函数init() -- 初始化数组为全0 2. 实现 函数print() -- 打印数组的每个元素 3. 实现 函数reverse() -- 函数完成数组元素的逆置 要求&#xff1a;自己设计以上函数的参数&#xff0c;返回值。 思路&a…

AB32VG1:SDK_AB53XX_V061(4)蓝牙音频测试笔记

文章目录 1. 淘宝上两种开发板&#xff0c;有一种的蓝牙功能不正常2. 蓝牙音频测试2.1 《config.h》和《Boombox.setting》两个配置以哪个为准2.2 codeblocks更换链接库2.2.1 这样进入build options是错的2.2.2 build options正确打开方式 2.3.编译工程&#xff0c;下载运行2.3…

kafka 报错 - Cannot assign requested address

背景 在华为云服务器上跑了 zookeeper 和 kafka 的 broker&#xff0c;想内外网分流&#xff0c;重点就是做不到从外网去消费&#xff0c;比如用自己的 windows 笔记本去消费。 配置 server.properties 的 listener 为 broker 所在机子的的内网 IP 后&#xff0c;终于能 star…

Scala环境搭建及安装

salca环境搭建 由于scala是基于java来开发的, 编写的java类可以使用javac命令编译成.class文件被JVM加载到内存中执行 ! 那么scala可以通过scalac命令将编写的scala文件编译成.class文件一样被JVM加载到内存中,因此Scala是运行在JVM平台上的&#xff0c;所以安装Scala之前要安装…