ftp协议详解

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

  • 9
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值