目录
1。链接分类
2。控制链接
3。数据链路
3.1,被动模式 (PASV)
3.2,活动模式(端口)
3.3。两种模式数据链路的差异
4。 FTP相关命令
4.1,登录
4.2。建立文件传输套接字通信
4.3、操作文件
4.4、目录操作
4.5,模式和类型
4.6、参数信息
4.7,其他不常用命令
4.8,FTP 服务器响应代码
FTP 是一种仅基于 TCP 的服务。不同的是FTP协议使用两个TCP连接。一是控制链路,用于客户端和服务器之间传递命令;另一个是数据链路。路,用于上传或下载数据。建立从客户端到服务器端口 21 的控制链路。根据数据链路的链路建立方向和使用的端口号分为主动模式和被动模式。
无论是被动模式还是主动模式,客户端都需要先使用大于1024的端口主动联系服务器 端口21 构建链路,形成控制链路。具体流程如下:
1。客户端向服务器端发起三次握手操作,完成TCP链接的建立
2、TCP链接建立完成,服务器端回复220给客户端(220:准备好服务新用户)
3、服务器向客户端发送响应530(530:要求客户端发送用户名和密码)
4、客户端发送用户名,服务器收到用户名后回复331并验证成功(331:用户名正确,需要密码)
5.客户端发送密码,服务收到密码验证成功并回复230(230:用户登录成功)
客户端:10.43.42.199,服务器:10.43.85.223,消息如下
//客户端
[root@localhost ~]# netstat -anp | grep 10.43.85.223
tcp 0 0 10.43.42.199:52055 10.43.85.223:21 建立 19848/ftp
ftp 默认使用被动模式传输数据。具体流程如下:
1。客户端向服务器发送PASV命令,告诉服务器使用被动模式(控制链路)
2、服务器收到命令后,打开一个监听端口listen_port(大于1024),并回复端口信息客户端
3. 客户端收到服务的listen_port信息后,立即创建一个新的端口,与listen_port建立链路(数据链路)
4. 数据链路建立完成后,数据信息发送到数据链路,控制命令信息经过控制链路
型号如下:
抓包信息如下:
client命令执行结果:
//clientftp>获取test1
本地:test1 远程:test1
227 进入被动模式 (10,43,85,223,25,164)。
150 打开 test1 的 BINARY 模式数据连接(70776816 字节)。
226 传输完成。
6.1 秒内接收到 70776816 字节 (1.1e+04 Kbytes/s)
....[roott@localhost ~]# netstat -anp | grep 10.43.85.223tcp 0 0 10.43.42.199:44613 10.43.85.223:6564 已建立 19848/ftp
tcp 0 0 10.43.42.199:52055 10.43.85.223:21 建立 19848/ftp
1。客户端在本地打开一个监听端口listen_port,然后向服务端发送PROT命令,将端口信息带到服务端
2、服务收到PROT命令后,立即使用本地20端口监听客户端上的listen_port 。链路建立(数据链路)
3、数据链路建立完成后,数据信息经过数据链路,控制指令信息经过控制链路。
抓包信息如下:
客户端命令执行结果:
//clientftp>被动
被动模式关闭。
ftp> 获取测试2
本地:test2 远程:test2
200 端口命令成功。考虑使用 PASV。
150 打开 test2 的 BINARY 模式数据连接(86743786 字节)。
226 传输完成。
7.5 秒内收到 86743786 字节 (1.1e+04 KB/s)
ftp> 退出[roott@localhost ~]# netstat -anp | grep 10.43.85.223
tcp 0 0 10.43.42.199:59250 10.43.85.223:20 已建立 19848/ftp
tcp 0 0 10.43.42.199:52055 10.43.85.223:21 建立 19848/ftp
[roott@localhost ~]# netstat -anp | grep 10.43.85.223
tcp 0 0 10.43.42.199:59250 10.43.85.223:20 已建立 19848/ftp
tcp 0 0 10.43.42.199:52055 10.43.85.223:21 建立 19848/ftp
[roott@localhost4 ~]# netstat -anp | grep 10.43.85.223
(每条命令执行后,服务器都会回复)
用户帐号\r\n | 登录帐号 |
PASS密码\r\n | 登录密码 |
REIN\r\n | 如果您想再次登录,连接将不关闭,下一篇文章命令USER重新连接 |
QUIT\r\n | 退出 |
PASV\r\n | 被动模式,服务器会回复IP地址和端口,然后您就可以连接。 (一般使用被动模式) |
PORT代表IP端口的特殊格式\r\n | 主动模式,让服务器主动连接你的文件监听套接字 |
STOR 文件名\r\n | 上传文件 |
APPE 文件名\r\n | 上传文件,如果文件名已存在,则在末尾插入数据 |
DELE 文件名\r\ n | 删除指定文件 |
REST字节数\r\n | 跳过字节数,短时间内恢复下载,在下载文件之前使用,以便RETR命令仅下载偏移部分 |
RETR 文件名\r\n | 下载文件 |
ABOR\r\n | 中止传输文件,将关闭文件套接字通信 |
TYPE 字符 \r\n | 选择传输类型 A 为文本模式 I 为二进制模式 E 为 EBCDIC N 为非打印模式 T 表示 Telnet格式控制字符 |
SYST\r\n | 获取服务器系统信息(NT或Unix) |
STAT文件或文件夹\r\n | 获取相关信息 |
ACCT 用户帐户\r\n | 发送 PASS 命令并在发送之前接收 332 代码 |
SMNT 另一个文件数据系统的路径\r\n | 允许用户挂载另一个文件系统不改变登录的数据结构 |
MODE字符 \r\n | 指定传输类型:默认为流模式(S为流)(B为块)(C为压缩) |
STRU字符\ r \n | 指定结构类型:F为文件结构(默认值为流式) |
ALLO逻辑字节\r\n | 在上传文件之前,使用此命令申请内存(I还没看到需要的就直接上传) |
NOOP | 测试通讯 |
HELP | 帮助,会列出有效命令 |
150 | 文件状态良好,数据连接已打开 |
200 | 命令成功 |
212 | 目录状态 |
213 | 文件状态 |
110 | 重启标记响应 |
500 | 格式错误,命令无法识别 |
501 | 参数语法错误 |
502 | 命令未执行 |
120 | 准备就绪 关闭控制连接,您可以注销 |
202 | 命令未执行 |
211 | 系统状态或系统帮助响应 |
225 | 数据连接打开,没有正在进行的传输 |
226 | 关闭数据连接,请求的文件操作成功 |
227 | 进入被动模式 |
230 | 用户登录 |
331 | 用户名正确,需要密码 |
332 | 登录需要帐户信息 |
350 | 请求的文件操作需要进一步的命令 |
421 | 连接数过多用户 |
425 | 无法打开数据连接 |
426 | 关闭连接,中止传输 |
450 | 未执行请求的文件操作 |
451 | 中止请求的操作:出现本地错误 |
452 | 未执行请求的操作:系统存储空间不足 |
250 | 请求的文件操作已完成 |
257 | 创建“PATHNAME” |
503 | 命令顺序错误 |
504 | 该参数下的命令功能未实现 |
530 | 帐号或密码不正确 |
532 | 帐号需要信息来存储文件 |
550 | 未执行请求的操作 |
551 | 请求的操作已中止:未知页面类型 |
552 | 请求的文件操作中止,存储分配溢出 |
553 | 未执行请求的操作:非法文件名 |
参考:
https://www.sychzs.cn/jingzi123456789/article/details/83409572
https://www.sychzs.cn/Aaron133/article/details/78508211