ftp工作原理.docx
- 文档编号:6722396
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:15
- 大小:27.76KB
ftp工作原理.docx
《ftp工作原理.docx》由会员分享,可在线阅读,更多相关《ftp工作原理.docx(15页珍藏版)》请在冰豆网上搜索。
ftp工作原理
FTP(文件传输协议)工作原理
目前在网络上,如果你想把文件和其他人共享。
最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件。
1、FTP架构
如同其他的很多通讯协议,FTP通讯协议也采用客户机/服务器(Client/Server)架构。
用户可以通过各种不同的FTP客户端程序,借助FTP协议,来连接FTP服务器,以上传或者下载文件。
2、FTP通讯端口知识
FTP服务器和客户端要进行文件传输,就需要通过端口来进行。
FTP协议需要的端口一般包括两种:
控制链路--------TCP端口21
所有你发往FTP服务器的命令和服务器反馈的指令都是通过服务器上的21端口传送的。
数据链路--------TCP端口20
数据链路主要是用来传送数据的,比如客户端上传、下载内容,以及列目录显示的内容等。
3、FTP连接的两种方式
在数据链路的建立上,FTP Server 为了适应不同的网络环境,支持两种连接模式:
主动模式(Port)和被动模式(Pasv)。
其实这两种连接模式主要是针对数据链路进行的,和控制链路无关。
主动模式
主动模式是这样工作的:
客户端把自己的高位端口和服务器端口21建立控制链路。
所有的控制命令比如Is或get都是通过这条链路传送的。
当客户端需要服务器端给它传送数据时,客户端会发消息给服务器端,告诉自己的位置和打开的高位端口(一般大于1024的端口都就叫高位端口),等候服务器的20端口和客户端打开的端口进行连接,从而进行数据的传输。
当服务器端收到信息后,就会和客户端打开的端口连接,这样数据链路就建立起来了。
采用主动模式连接服务器的客户端,当它位于NAT或者防火墙的保护之后时会碰到连接失败的问题。
这是因为当防火墙接到服务器发送过来的信息的时候,并不知道应该发送给内部网络中的哪一台客户端造成的。
被动模式
被动模式是这样工作的:
当客户端发送数据请求后,服务器也会发信息给客户端,告诉客户端:
服务器在本地打开了一个高位端口P,你现在来连接我吧。
当客户端收到该信息时,就会去连接服务器端的端口P,连接成功后,数据链路就建立了。
从上面的解释中我们可以看到,两种模式主要的不同是数据连接建立的不同。
对于Port模式,是客户端在本地打开一个端口等服务器去连接建立数据连接,而Pasv模式就是服务器打开一个端口等待客户端去建立一个数据连接。
浅析文件传输协议(ftp)的工作原理
起初,FTP并不是应用于IP网络上的协议,而是ARPANEt网络中计算机间的文件传输协议,ARPANET是美国国防部组建的老网络,于1960-1980年使用。
在那时,FTP的主要功能是在主机间高速可靠地传输文件。
目前FTP仍然保持其可靠性,即使在今天,它还允许文件远程存取。
这使得用户可以在某个系统上工作,而将文件存贮在别的系统。
例如,如果某用户运行Web服务器,需要从远程主机上取得HTML文件和CGI程序在本机上工作,他需要从远程存储站点获取文件(远程站点也需安装Web服务器)。
当用户完成工作后,可使用FTP将文件传回到Web服务器。
采用这种方法,用户无需使用Telnet登录到远程主机进行工作,这样就使Web服务器的更新工作变得如此的轻松。
FTP是TCP/IP的一种具体应用,它工作在OSI模型的第七层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的"三次握手"的过程,它带来的意义在于客户与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠的保证。
下面,让我们来看看,一个FTP客户在和服务器连接是怎么样的一个过程(以标准的FTP端口号为例)。
首先,FTP并不像HTTP协议那样,只需要一个端口作为连接(HTTP的默认端口是80,FTP的默认端口是21),FTP需要2个端口,一个端口是作为控制连接端口,也就是21这个端口,用于发送指令给服务器以及等待服务器响应;另一个端口是数据传输端口,端口号为20(仅PORT模式),是用来建立数据传输通道的,主要有3个作用
从客户向服务器发送一个文件。
从服务器向客户发送一个文件。
从服务器向客户发送文件或目录列表。
其次,FTP的连接模式有两种,PORT和PASV。
PORT模式是一个主动模式,PASV是被动模式,这里都是相对于服务器而言的。
为了让大家清楚的认识这两种模式,朗月繁星分别举例说明。
PORT模式
当FTP客户以PORT模式连接服务器时,他动态的选择一个端口号(本次试验是6015)连接服务器的21端口,注意这个端口号一定是1024以上的,因为1024以前的端口都已经预先被定义好,被一些典型的服务使用,当然有的还没使用,保留给以后会用到这些端口的资源服务。
当经过TCP的三次握手后,连接(控制信道)被建立(如图1和图2)。
图1:
FTP客户使用FTP命令建立于服务器的连接
图2:
用netstat命令查看,控制信道被建立在客户机的6015和服务器的20端口
现在用户要列出服务器上的目录结构(使用ls或dir命令),那么首先就要建立一个数据通道,因为只有数据通道才能传输目录和文件列表,此时用户会发出PORT指令告诉服务器连接自己的什么端口来建立一条数据通道(这个命令由控制信道发送给服务器),当服务器接到这一指令时,服务器会使用20端口连接用户在PORT指令中指定的端口号,用以发送目录的列表(如图3)。
图3:
ls命令是一个交互命令,它会首先与服务器建立一个数据传输通道。
经验证本次试验客户机使用6044端口
当完成这一操作时,FTP客户也许要下载一个文件,那么就会发出get指令,请注意,这时客户会再次发送PORT指令,告诉服务器连接他的哪个"新"端口,你可以先用netstat-na这个命令验证,上一次使用的6044已经处于TIME_WAIT状态(如图4)。
图4:
使用netstat命令验证上一次使用ls命令建立的数据传输通道已经关闭
当这个新的数据传输通道建立后(在微软的系统中,客户端通常会使用连续的端口,也就是说这一次客户端会用6045这个端口),就开始了文件传输的工作。
PASV模式
然而,当FTP客户以PASV模式连接服务器时,情况就有些不同了。
在初始化连接这个过程即连接服务器这个过程和PORT模式是一样的,不同的是,当FTP客户发送ls、dir、get等这些要求数据返回的命令时,他不向服务器发送PORT指令而是发送PASV指令,在这个指令中,用户告诉服务器自己要连接服务器的某一个端口,如果这个服务器上的这个端口是空闲的可用的,那么服务器会返回ACK的确认信息,之后数据传输通道被建立并返回用户所要的信息(根据用户发送的指令,如ls、dir、get等);如果服务器的这个端口被另一个资源所使用,那么服务器返回UNACK的信息,那么这时,FTP客户会再次发送PASV命令,这也就是所谓的连接建立的协商过程。
为了验证这个过程我们不得不借助CUTEFTPPro这个大家经常使用的FTP客户端软件,因为微软自带的FTP命令客户端,不支持PASV模式。
虽然你可以使用QUOTEPASV这个命令强制使用PASV模式,但是当你用ls命令列出服务器目录列表,你会发现它还是使用PORT方式来连接服务器的。
现在我们使用CUTEFTPPro以PASV模式连接服务器(如图5)。
图5:
使用CUTEFTPPro以PASV模式连接服务器
请注意连接LOG里有这样几句话:
COMMAND:
>PASV
227EnteringPassiveMode(127,0,0,1,26,108)
COMMAND:
>LIST
STATUS:
>Connectingftpdatasocket127.0.0.1:
6764...
125Dataconnectionalreadyopen;Transferstarting.
226Transfercomplete.
其中,227EnteringPassiveMode(127,0,0,1,26,80).代表客户机使用PASV模式连接服务器的26x256+108=6764端口。
(当然服务器要支持这种模式)
125Dataconnectionalreadyopen;Transferstarting.说明服务器的这个端口可用,返回ACK信息。
再让我们看看用CUTEFTPPro以PORT模式连接服务器的情况。
其中在LOG里有这样的记录:
COMMAND:
>PORT127,0,0,1,28,37
200PORTcommandsuccessful.
COMMAND:
>LIST
150OpeningASCIImodedataconnectionfor/bin/ls.
STATUS:
>Acceptingconnection:
127.0.0.1:
20.
226Transfercomplete.
STATUS:
>Transfercomplete.
其中,PORT127,0,0,1,28,37告诉服务器当收到这个PORT指令后,连接FTP客户的28x256+37=7205这个端口。
Acceptingconnection:
127.0.0.1:
20表示服务器接到指令后用20端口连接7205端口,而且被FTP客户接受。
比较分析
在这两个例子中,请注意:
PORT模式建立数据传输通道是由服务器端发起的,服务器使用20端口连接客户端的某一个大于1024的端口;在PASV模式中,数据传输的通道的建立是由FTP客户端发起的,他使用一个大于1024的端口连接服务器的1024以上的某一个端口。
如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,比如使用微软的ISAServer2000发布一个FTP服务器,这一点非常关键,如果设置错了,那么客户将无法连接。
最后,请注意在FTP客户连接服务器的整个过程中,控制信道是一直保持连接的,而数据传输通道是临时建立的。
在本文中把重点放到了FTP的连接模式,没有涉及FTP的其他内容,比如FTP的文件类型(Type),格式控制(Formatcontrol)以及传输方式(Transmissionmode)等。
不过这些规范大家可能不需要花费过多的时间去了解,因为现在流行的FTP客户端都可以自动的选择正确的模式来处理,对于FTP服务器端通常也都做了一些限制,如下:
类型:
ASCII或图像。
格式控制:
只允许非打印。
结构:
只允许文件结构。
传输方式:
只允许流方式
至于这些内容,限于篇幅在这里就不想再介绍了。
希望这篇文章能对大家有些帮助,特别是正在学习ISAServer2000的朋友和一些对FTP不很了解的朋友。
"+userLink+" ";$('miniAd').show();}},on
Failure:
function(){}}});}showMiniAd();
FTP协议安全分析
前言
FTP(FileTransferProtocol,文件传输协议)是互联网上常用的协议之一,人们用FTP实现互连网上的文件传输。
由于TCP/IP协议族在设计时是处在一个相互信任的平台上的,使得在网络安全越来越被重视的今天,TCP/IP协议族的安全性也成为了安全界研究的一个重点,著名的ARP欺骗,交换环境下的数据监听,中间人攻击,以及DDOS,都利用了TCP/IP协议的脆弱性,FTP协议也或多或少的存在着一些问题,本文从FTP协议本身出来,探讨一下FTP协议的安全性。
第一章FTP协议
一、协议简介
FTP协议和HTTP协议类似,都是采用的TCP连接,但与HTTP协议不同的是,HTTP协议的所有数据都是通过80端口进行传输(这里不考虑SSL),而FTP把数据和命令分开来处理,我们暂且把它们分别命名为“命令通道”和“数据通道”。
命令通道一般是在我们熟悉的21端口,而数据通道通常是一个高端口。
例如客户机要从FTP服务器上获取某个文件,首先由客户机登录服务器,与服务器建立连接,这就是我们前面讲的“命令通道”,客户机从这条通道将请求文件的命令发往服务器,服务器接到此命令后将与客户机重新建立一条连接,这就是我们面前讲的“数据通道”,文件数据将通过数据通道传送到客户机。
这里我们用图1-1来表示文件传输中的处理过程
用户接口
|
|命令通道
用户协议解释器--------------服务器协议接口
|
|数据通道
用户数据传输功能-----------服务器数据传输功能
二、数据表示
FTP协议规范提供了控制文件传送与存储的多种选择。
在以下四个方面都须作出一个选择。
1、文件类型
(1)ASCII码文件类型一般情况下ASCII码文件类型是默认选择的。
(2)EBCDIC文件类型该类型传输方式要求两端都是EBCDIC系统。
(3)图像文件类型(也称二进制类型)数据发送呈现为一个比特流,通常用于传输二进制文件
(4)本地文件类型该方式在具有不同字节大小的主机之间传输二进制文件。
2、格式控制
该选项只对ASCII和EBCDIC文件有效。
(1)非打印
(2)远程登录格式控制
(3)Fortran回车控制
3、结构
(1)文件结构
(2)记录结构
(3)页结构
4、传输方式
(1)流方式
(2)块方式
(3)压缩方式
三、FTP命令
FTP命令和应答是在命令通道以ASCII码开形式传送的,以下给出常用的命令及命令的相关说明:
命令说明
ABOR放弃先前的FTP命令和数据转输
LIST列表显示文件或目录
PASS服务器上的口令
PORT客户IP地址和端口
QUIT从服务器上注销
RETR取一个文件
STOR存一个文件
SYST服务器返回系统类型
TYPE说明文件类型
USER服务器上的用户名
四、FTP应答
FTP应答都是ASCII码形式的3位数字,并跟有报文选项。
3位数字每一位都有不同的意义,这里给出一些常见的反回数字:
125数据通道已经打开;传输开始。
200就绪命令。
214帮助报文。
331用户名就绪,要求输入口令。
425不能打开数据通道。
500语法错误(未认可命令)。
501语法错误(无效参数)。
502未实现的MODE(方式命令)类型。
五、连接管理
我们在前面讲了FTP的命令传输和数据传输是通过不同的端口进行传输的,连接管理也就理所当然的成了FTP协议的核心问题。
其中最关键的又是数据通道的管理。
数据通道有以下三大用途:
1>从客户向服务器发送一个文件。
2>从服务器向客户发送一个文件。
3>从服务器向客户发送文件域目录列表。
其中传输模式又有主动FTP和被动FTP之分。
主动FTP的一般过程如下:
1、客户发出命令建立数据连接。
2、客户通常在客户端主机上为所在数据连接选择一个临时端口号。
客户从该端口发布一个被动的打开。
3、客户使用PORT命令从命令通道把数据通道的端口发向服务器。
4、服务器在命令通道上接收端口号,并向客户端主机上的端口发存一个主动的打开。
这时服务器的数据通道使用的是20端口。
而被动FTP与主动FTP不同的是它不是由客户主机开一个临时端口,而是由服务器开一个临时端口等待客户机的连接。
Fedora自带的vsftp就是采用的被动的传输模式。
下面是从登录vsftp,到执行ls,再到退出的全过程。
[xinhe@xinhexinhe]$ftp-dxxx.xxx.xxx.xxx
Connectedtoxxx.xxx.xxx.xxx(xxx.xxx.xxx.xxx).
220WelcometoylyzFTPservice.
Name(xxx.xxx.xxx.xxx:
xinhe):
xplore
--->USERxinhe
331Pleasespecifythepassword.
Password:
--->PASSXXXX
230Loginsuccessful.
--->SYST
215UNIXType:
L8
RemotesystemtypeisUNIX.
Usingbinarymodetotransferfiles.
ftp>ls
ftp:
setsockopt(ignored):
Permissiondenied
--->PASV
227EnteringPassiveMode(xxx,xxx,xxx,xxx,204,73)
--->LIST
150Herecomesthedirectorylisting.
drwxr-xr-x1148484096Jul2110:
52xxx
drwxr-xr-x1948484096Jul3114:
18xxxx
drwx------20016384Jun2303:
18lost+found
drwxr-xr-x35105104096Aug0305:
42software
drwxr-xr-x25105104096Jun3009:
34tmp
drwxr-xr-x65105104096Jun2708:
17xxxxx
drwxrwxr-x105015014096Aug1220:
35xxxxxxx
-rw-r--r--151051012649185Aug1220:
34xxxx
drwxr-xr-x7501124096Jul0315:
13xinhe
drwxr-xr-x75105104096Aug1319:
08zwell
226DirectorysendOK.
Ftp>bye
--->QUIT
221Goodbye.
以上就是登录某台vsftp的服务器,执行了一个ls然后再退出的全过程,以上是采用的被动传输模式,关键看这一句:
--->PASV
227EnteringPassiveMode(xxx,xxx,xxx,xxx,204,73)
这一句告诉了我们服务器的IP和开临时数据端口,接着便是登录到这一临时端口52297,临时端口的算法:
204*256+73。
为了更清楚的了解之过程,我们对这一过程的数据传送进行了监视。
以下是客户机登录临时端口过程中的一段
08/24-15:
24:
24.0528460:
E0:
4C:
F0:
E0:
EA->0:
D0:
F8:
51:
FC:
81type:
0x800len:
0x4A
192.168.10.8:
32791->xxx.xxx.xxx.xxx:
52297TCPTTL:
64TOS:
0x0ID:
39780IpLen:
20DgmLen:
60DF
******S*Seq:
0x42206DD2Ack:
0x0Win:
0x16D0TcpLen:
40
TCPOptions(5)=>MSS:
1460SackOKTS:
8495900NOPWS:
0
注:
由于测式过程中的服务器是公网上的真实服务器,故屏弊其地址。
第二章安全隐患
以上我们讨论了FTP协议本身和FTP的具体传输过程,在这一过程中,很多地方都存在着安全隐患,随着互联网和普及了深入,网络安全也越来越被人们重视,在这里我把一些常见的关于FTP的安全隐患提出来,希望引起人们对FTP安全的重视,使FTP服务器和数据传输过程更加安全。
一、FTP服务器软件漏洞
这类安全隐患不是本文讨论的重点,但是在这里必须把它提出来,因为它对于FTP服务供应商来说就是恶梦,也是倍受黑客们关注的焦点,常用的FTP服务软件有Wu-ftpd,ProFTPD,vsftpd,以及windows下常用的Serv-U等,最常见也最可怕的漏洞就是缓冲区溢出,近来Wu-ftpd和Serv-U的溢出漏洞层出不穷,ProFTPD也出现过缓冲区溢出,目前比较安全的还是vsftp,必竞是号称非常安全的FTP。
二、明文口令
前面讲过了,TCP/IP协议族的设计在地相互信任和安全的基础上的,FTP的设计当然也没有采用加密传送,这样的话,FTP客户与服务器之前所有的数据传送都是通过明文的方式,当然也包括了口令。
至从有了交换环境下的数据监听之后,这种明文传送就变得十分危险,因为别人可能从传输过程过捕获一些敏感的信息,如用户名和口令等。
像HTTPS和SSH都采用加密解决了这一问题。
而FTP仍然是明文传送,而像UINX和LINUX这类系统的ftp账号通常就是系统帐号,(vsftp就是这样做的)。
这样黑客就可以通过捕获FTP的用户名和口令来取得系统的帐号,如果该帐号可以远程登录的话,通常采用本地溢出来获得root权限。
这样这台FTP服务器就被黑客控制了。
以下是我捕获的明文传送的数据:
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
08/24-15:
24:
13.5112330:
E0:
4C:
F0:
E0:
EA->0:
D0:
F8:
51:
FC:
81type:
0x800len:
0x4F
192.168.10.8:
32790->xxx.xxx.xxx.xxx:
21TCPTTL:
64TOS:
0x10ID:
36423IpLen:
20DgmLen:
65DF
***AP***Seq:
0x407F7F77Ack:
0x1BD963BFWin:
0x16D0TcpLen:
32
TCPOptions(3)=>NOPNOPTS:
8485361353912910
555345522078706C6F72650D0AUSERxinhe..
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
08/24-15:
24:
13.5570580:
D0:
F8:
51:
FC:
81->0:
E0:
4C:
F0:
E0:
EAtype:
0x800len:
0x42
xxx.xxx.xxx.xxx:
21->192.168.10.8:
32790TCPTTL:
56TOS:
0x0ID:
29145IpLen:
20DgmLen:
52DF
***A****Seq:
0x1B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ftp 工作 原理
![提示](https://static.bdocx.com/images/bang_tan.gif)