一、Windows下搭建FTP服务器,抓取FTP数据包
1、
2、

3、

4、

5、IP地址填写自己本机的IP地址

6、勾选了匿名就不用输入密码了

7、

8、抓包

二、linux下FTP抓包
先检查有没有安装FTP

没有的话执行下面命令安装
yum install vsftpd -y
通过/etc/vsftpd/vsftpd.conf 文件来设置FTP
pasv_enable=NO (passive模式关闭)
pasv_min_port=3000
pasv_max_port=4000
port_enable=YES (active模式开启)
connect_from_port_20=YES (即默认情况下,FTP PORT主动模式进行数据传输时使用20端口(ftp-data)。YES使用,NO不使用。)
配置完之后 service vsftpd restart 重启ftp服务,然后用tcpdump抓包就可以了。
三、FTP协议
FTP采用被动模式。
主动模式(PORT)
如下图所示,用户主机直接暴露在互联网中,用户连接FTP SERVER使用主动模式遵循以下一个过程:

用户主机一个随机端口连接FTP SERVER的TCP21端口进行协商;
用户主机告诉FTP SERVER,我的XXXX端口已经打开,你可以放心大胆的连过来;
然后FTP SERVER就用TCP20端口连接用户主机的XXXX端口,数据传输开始。
被动模式(PASV)
当用户主机前端多了一道防火墙(客户机使用地址转换接入互联网),事情就变的复杂了,首先,主动模式是FTP SERVER连接客户机,防火墙肯定不干;即便乐意干客户机与服务器协商的XXXX端口也是随机端口,你让迷茫的防火墙情何以堪,这时就需要客户端软件使用被动模式主动连接防火墙,这么一来正合防火墙的胃口。
客户端使用被动模式遵循以下过程:

首先用户使用随机端口连接FTP SERVER的TCP 21端口进行协商;
FTP SERVER告诉客户机:我的XXXX端口开放了,你连过来吧;
客户机使用一个随机端口连接FTPSERVER的XXXX端口传输数据。
设置被动模式和主动模式

FTP协议概述
默认端口数据连接用20号端口,控制连接用21号端口。FTP协议的底层协议是TCP协议。此外它还需要安装dns服务。






ftp客户端命令
| 命令 | 描述 |
| ABOR | (ABORT)此命令使服务器终止前一个FTP服务命令以及任何相关数据传输。 |
| ACCT | (ACCOUNT)此命令的参数部分使用一个Telnet字符串来指明用户的账户。 |
| ADAT | (AUTHENTICATION/SECURITY DATA)认证/安全数据 |
| ALLO | 为接收一个文件分配足够的磁盘空间 |
| APPE | 增加 |
| AUTH | 认证/安全机制 |
| CCC | 清除命令通道 |
| CDUP | 改变到父目录 |
| CONF | 机密性保护命令 |
| CWD | 改变工作目录 |
| DELE | 删除文件 |
| ENC | 隐私保护通道 |
| EPRT | 为服务器指定要连接的扩展地址和端口 |
| EPSV | 进入扩展被动模式 |
| FEAT | 获得服务器支持的特性列表 |
| HELP | 如果指定了命令,返回命令使用文档;否则返回一个通用帮助文档 |
| LANG | 语言协商 |
| LIST | 如果指定了文件或目录,返回其信息;否则返回当前工作目录的信息 |
| LPRT | 为服务器指定要连接的长地址和端口 |
| LPSV | 进入长被动模式 |
| MDTM | 返回指定文件的最后修改时间 |
| MIC | 完整性保护命令 |
| MKD | 创建目录 |
| MLSD | 如果目录被命名,列出目录的内容 |
| MLST | 提供命令行指定的对象的数据 |
| MODE | 设定传输模式(流、块或压缩) |
| NLST | 返回指定目录的文件名列表 |
| NOOP | 无操作(哑包;通常用来保活) |
| OPTS | 为特性选择选项 |
| PASS | 认证密码 |
| PASV | 进入被动模式 |
| PBSZ | 保护缓冲大小 |
| PORT | 指定服务器要连接的地址和端口 |
| PROT | 数据通道保护级别 |
| PWD | 打印工作目录,返回主机的当前目录 |
| QUIT | 断开连接 |
| REIN | 重新初始化连接 |
| REST | 从指定点重新开始传输 |
| RETR | 传输文件副本 |
| RMD | 删除目录 |
| RNFR | 从...重命名 |
| RNTO | 重命名到... |
| SITE | 发送站点特殊命令到远端服务器 |
| SIZE | 返回文件大小 |
| SMNT | 挂载文件结构 |
| STAT | 返回当前状态 |
| STOR | 接收数据并且在服务器站点保存为文件 |
| STOU | 唯一地保存文件 |
| STRU | 设定文件传输结构 |
| SYST | 返回系统类型 |
| TYPE | 设定传输模式(ASCII/二进制). |
| USER | 认证用户名 |
| XCUP | 改变之当前工作目录的父目录 |
| XMKD | 创建目录 |
| XPWD | 打印当前工作目录 |
| XRCP | |
| XRMD | 删除目录 |
| XRSQ | |
| XSEM | 发送,否则邮件 |
| XSEN | 发送到终端 |
ftp响应码
1xx - 肯定的初步答复
这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。 • 110 重新启动标记答复。
• 120 服务已就绪,在 nnn 分钟后开始。
• 125 数据连接已打开,正在开始传输。
• 150 文件状态正常,准备打开数据连接。
2xx - 肯定的完成答复
一项操作已经成功完成。客户端可以执行新命令。 • 200 命令确定。
• 202 未执行命令,站点上的命令过多。
• 211 系统状态,或系统帮助答复。
• 212 目录状态。
• 213 文件状态。
• 214 帮助消息。
• 215 NAME 系统类型,其中,NAME 是 Assigned Numbers 文档中所列的正式系统名称。
• 220 服务就绪,可以执行新用户的请求。
• 221 服务关闭控制连接。如果适当,请注销。
• 225 数据连接打开,没有进行中的传输。
• 226 关闭数据连接。请求的文件操作已成功(例如,传输文件或放弃文件)。
• 227 进入被动模式 (h1,h2,h3,h4,p1,p2)。
• 230 用户已登录,继续进行。
• 250 请求的文件操作正确,已完成。
• 257 已创建“PATHNAME”。
3xx - 肯定的中间答复
该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。 • 331 用户名正确,需要密码。
• 332 需要登录帐户。
• 350 请求的文件操作正在等待进一步的信息。
4xx - 瞬态否定的完成答复
该命令不成功,但错误是暂时的。如果客户端重试命令,可能会执行成功。 • 421 服务不可用,正在关闭控制连接。如果服务确定它必须关闭,将向任何命令发送这一应答。
• 425 无法打开数据连接。
• 426 Connection closed; transfer aborted.
• 450 未执行请求的文件操作。文件不可用(例如,文件繁忙)。
• 451 请求的操作异常终止:正在处理本地错误。
• 452 未执行请求的操作。系统存储空间不够。
5xx - 永久性否定的完成答复
该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。 • 500 语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。
• 501 在参数中有语法错误。
• 502 未执行命令。
• 503 错误的命令序列。
• 504 未执行该参数的命令。
• 530 未登录。
• 532 存储文件需要帐户。
• 550 未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。
• 551 请求的操作异常终止:未知的页面类型。
• 552 请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。
• 553 未执行请求的操作。不允许的文件名。
常见的 FTP 状态代码及其原因
• 150 - FTP 使用两个端口:21 用于发送命令,20 用于发送数据。状态代码 150 表示服务器准备在端口 20 上打开新连接,发送一些数据。
• 226 - 命令在端口 20 上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。
• 230 - 客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。
• 331 - 客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。
• 426 - 命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。
• 530 - 该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS 的配置可能拒绝匿名访问。
• 550 - 命令未被执行,因为指定的文件不可用。例如,要 GET 的文件并不存在,或试图将文件 PUT 到您没有写入权限的目录。
ftp协议格式
1、请求格式
请求命令<sp>命令参数<\r\n>
或者
请求命令<\r\n>
命令参数根据不同的命令可以为空。
例如,list命令没有参数后面直接就是\r\n,retr命令后面要跟一个空格然后加上参数才行。


补充:
1、port ,pasv命令的回复计算数据传输端口
1、通过下面报文可以看出,客户端发送pasv命令就,服务器进入被动模式,根据ftp协议,服务器会告诉客户端服务器用什么地址和端口来传输数据,由上图可以看出服务器采用的地址为192.168.1.212 ,端口的计算公式为 57 * 256 + 125 = 14717.


2、在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT 命令告诉服务器连接的地址和端口(格式和计算端口方式和被动模式一样)。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。


2、ALG相关
普通NAT实现了对UDP或TCP报文头中的的IP地址及端口转换功能,但对应用层数据载荷中的字段无能为力,在许多应用层协议中,比如多媒体协议(H.323、SIP等)、FTP、SQLNET等,TCP/UDP载荷中带有地址或者端口信息,这些内容不能被NAT进行有效的转换,就可能导致问题。而NAT ALG(Application Level Gateway,应用层网关)技术能对多通道协议进行应用层报文信息的解析和地址转换,将载荷中需要进行地址转换的IP地址和端口或者需特殊处理的字段进行相应的转换和处理,从而保证应用层通信的正确性。FTP应用就由数据连接和控制连接共同完成,而且数据连接的建立动态地由控制连接中的载荷字段信息决定,这就需要ALG来完成载荷字段信息的转换,以保证后续数据连接的正确建立。
本文详细介绍了在Windows和Linux环境下搭建FTP服务器的过程,包括配置FTP服务、抓取FTP数据包的方法,以及FTP协议的工作原理。深入解析了主动模式和被动模式下FTP的数据传输流程,同时提供了FTP命令和响应码的全面列表。

1145

被折叠的 条评论
为什么被折叠?



