FTP----笔记

本文介绍了在Redhat上搭建FTP服务器的步骤,并详细解析了FTP的登录流程及数据连接方式,包括PASV和PORT模式的区别。此外,还讨论了FTP协议的特点,如在浏览器中使用FTP时的DNS解析过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


FTP

1. 尝试在redhat 上搭建一个服务器:

yum install vsftpd

vim /etc/vsftpd/vsftpd.conf

service vsftpd start

adduser -gftp -s /sbin/nologin vivi


2. FTP 流程:

从另一条linux  ftp 到 自己搭建的server, 输入用户名密码登陆。抓包观察,

server->client   Response 220 Welcom to xx ftp server.

client->server  Request USER xxx

server->client Response  331 Please specify the password.

client->server Request  PASS  1234

server->client Response 230 Login successful.

client->server Request : PORT 

server->client Response: 200 Command okay.

从抓包可以看出,用户名和密码都是明文传送的,不安全。

PS  PASS   PORT  USER 都是ftp的命令。 

FTP有控制连接和数据连接。控制连接就是用上述命令来实现的。

数据连接就是用户请求数据的时候建立起来的。数据传送完毕就关闭此连接,但是控制连接一直都存在,知道用户发送QUIT命令请求退出的时候:

client->server Request: QUIT

server->client  Response: 221 Goodbye.


3. ftp的两种模式:

PASV  vs  PORT (被动模式 vs 主动模式)

首先,所谓的“模式”是相对于ftp server来说的,所以

PASV 模式也就是说 ftp server是被动的,被动的等待 client来连接它!

PORT模式就是说 ftp server 主动的去连接client。

并且,都是指的数 据连接阶段是 “主动”  还是 “被动”。

大家都知道,ftp 使用21 端口 作为控制连接,使用 20 端口作为数据连接。实际上,21端口确实一直是用户和ftpserver建立控制连接的端口,但是

20  却不一定是 数据传输的端口。

只有在 PORT模式下(主动模式下),ftp server 才会主动使用自己的  20 端口去和 用户的另一个 协商好的端口 连接。

在PASV模式下,ftp server等待用户来连接自己的 数据连接的端口。 这个端口是敞开的,如果仍使用小端口,会存在安全隐患。所以,在 PASV模式下,ftp server 使用的是一个随机的 端口(一般为大端口) 而不是20 来与 用户建立数据连接。


具体意思,下图大概能表示出来:

PORT
/===============================================\
|                                      |
|       [ ftpClient ]                           [ftp Server ]          
|                                                                     
|       (TCP:21 连接初始化,控制端口)                                   |
|                              SYN                                                            |
|        Port xxxx  ---------------------->    Port21       [TCP]      |
|                             SYN+ACK                                                           |
|        Port xxxx  <----------------------    Port21                              |
|                              ACK                                                                   |
|        Port xxxx  ---------------------->    Port21                              |
|                                                                                                        |
|       (控制操作: 用户列目录或传输文件)                                |
|                                                                                                        |
|                      Port, IP, Port yyyy                                                   |
|        Port xxxx  <----------------------    Port21                              |
|                      Port Seccussful                                                       |
|        Port xxxx  <----------------------    Port21                              |
|                      List, Retr or                                                             |
|        Port xxxx  ---------------------->    Port21                              |

|        (TCP:20 连接初始化,数据端口)                                   |
|                               SYN                                                     |
|        Port yyyy  <----------------------    Port20                        |              
                             SYN+ACK                                                                                    |
|        Port yyyy  ---------------------->    Port20                       |
|                               ACK                                                           |
|        Port yyyy  <----------------------    Port20                       |
|                                                                                                 |
|                                                                                                 |
|        (数据操作: 数据传输)                                                 |
|                           Data + ACK                                                  |
|        Port yyyy  <--------------------->   Port 20                     |
|                               .                                                                |
|                                                                                               |
\===========================================/
/================================================\       PASV
|                                                   	                           |
|       [ ftp Client ]                    	          [ ftp Server ]         	 |
|                                                      	                           |
|       (TCP:21 连接初始化,控制端口)                                        |
|                              SYN                                         	 |
|        Port xxxx   ---------------------->    Port 21       [TCP] 	 |
|                             SYN+ACK                             		 |
|        Port xxxx   <----------------------    Port 21         	 |
|                              ACK                              		 |
|        Port xxxx   ---------------------->    Port 21       	 |
|                                                                  		 |
|       (PASV操作: 被动连接数据端口初始化)                          |
|                                                                		 |
|                             PASV                                  		 |
|        Port xxxx   ---------------------->    Port 21           	  |
|                     PASV OK, IP, Port yyyy                       	  |
|        Port xxxx   <----------------------    Port 21        	  |
|                               SYN                             		  |
|        Port zzzz   ---------------------->    Port yyyy  	  |
|                            SYN+ACK                        		  |
|        Port zzzz   <----------------------    Port yyyy       	  |
|                               ACK                                		  |
|        Port zzzz   ---------------------->    Port yyyy     	   |
|                                                                  		   |
|                                                                		    |
|        (数据操作: 数据传输)                                 	    |
|                       List, Retr or Stor                       		    |
|        Port xxxx   ---------------------->    Port 21          	    |
|                           Data + ACK                            		    |
|        Port zzzz   <--------------------->    Port yyyy      	     |
|                               .                               		     |
|                               .                               		     |
|                               .                               		     |
|                                                               		     |
\=================================================/





4. ftp 协议~

1.  ftp://ftp.pku.edu.cn

用户访问这个网址的时候,像IP一样,需要一个DNS解析的过程,将这个域名解析为IP地址。

HTTP 报文头中会有一个 URL 位,所以根据HTTP报文,我们可以得到用户请求访问的域名。

但是  ftp 报文简单,用户发起请求的时候,user 这端自己去解析DNS-》ip,后续对ftp抓包显示

报文就得不到这个域名了。(实际上抓包显示ftp报文,确实很简单,只有几个简单的命令)

2.  在browser 中直接输入  ftp://ftp.pku.edu.cn  , ftp协议是在http协议之上的--》ftp  over  http

ftp有很多类似工具,在此工具里打开 ftp://ftp.pku.edu.cn  的话,就是pure 的ftp



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值