一、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来完成载荷字段信息的转换,以保证后续数据连接的正确建立。