您现在的位置是:首页 >其他 >FTP协议分析(主动模式和被动模式)网站首页其他
FTP协议分析(主动模式和被动模式)
今天本来计划分析下suricata中协议识别和解析的代码的,准备先从ftp协议开始看,不过看了一会儿代码后,还是觉得有必要对ftp协议的细节先熟悉熟悉。
目录
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还是简单很多的。