FTP协议
FTP(File Transfer Protocol)是TCP/IP协议组中的应用层协议之一,是Internet文件传送的基础。
该协议旨在提高文件的共享性,透明、可靠和高效地传送远程用户数据。
实际上,FTP就是完成两台计算机之间的文件复制。从远程计算机复制文件到本地计算机上称为"下载(Download)"文件;若将文件从本地计算机中复制到远程计算机上,则称为"上传(Upload)"文件。
在TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。控制连接在整个会话期间一直保持连接状态;数据连接则是临时建立的,在文件传送结束后即被关闭。
1. FTP客户/服务器
FTP是一个客户/服务器系统。客户端和服务器是通过两个连接进行通信的,如图2-9 所示。
其一是控制连接,即传输控制命令,客户端发出FTP命令,服务器给出应答。在这个连接中,FTP服务器使用的端口号是21,连接由客户端发起。用户通过用户接口进行FTP操作,一般的用户接口是指FTP客户端(如CuteFTP)或者命令行程序(如ftp.exe)。在用户接口使用的是ftp命令,如ls、get、cd等,这些ftp命令并不是真正与FTP服务器交互的命令,它们还需要由用户协议解释器翻译成真正的FTP协议命令,才能与服务器进行交互。
其二是数据连接,即真正的文件传输是在这个连接上进行的。服务器端的数据连接端口号是20,客户端的数据连接端口是随机生成的。数据连接只在传输文件时存在,文件传送完后这个连接就断开了。如果需要再次传送文件,会再次建立一个新的数据连接。
2 数据连接主动方式/被动方式
FTP的数据连接支持两种模式:主动模式和被动模式,两者的区别在于数据连接是由谁发起的。
主动模式 | Port 方式,收到数据传送请求(下载或上传)后,服务器主动与客户端建立连接 |
被动模式 | Pasv方式,FTP的客户端发送Pasv命令到FTP服务器。 |
①主动模式即Port 方式,收到数据传送请求(下载或上传)后,服务器主动与客户端建立连接。为此服务器必须获得客户端的端口号。在此模式下,客户端利用控制连接,将端口号通告给服务器。客户端发送的命令是PORTnl,n2,n3,n4,n5,n6。其中前四位表示客户端的IP地址(n1.n2.n3.n4),后两位确定端口号为n5×256+n6。传送数据时,服务器端通过自己的 TCP20端口连接至客户端的指定端口发送数据。
②被动模式即Pasv方式,FTP的客户端发送Pasv命令到FTP服务器。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024。主要原因是1024以前的端口都已经预先被定义,由一些典型的服务使用或保留给以后会用到这些端口的资源服务),并且通知客户端在该端口上传送数据的请求。
客户端连接FTP服务器端口,然后FTP服务器将通过该端口进行数据的传送,此时FTP服务器不再需要和客户端建立一个新的连接。很多防火墙在设置时都不允许接受外部发起的连接,所以许多位于防火墙后或内网的FTP服务器不支持Pasv模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口。
而许多内网的客户端不能用Port模式登录FTP服务器,因为服务器的TCP 20端口无法和内部网络的客户端建立一个新的连接,造成无法工作。
关于传输模式:
另一种总结
FTP有两种传输的模式:
- 主动模式
- 被动模式
一个完整的FTP文件传输需要建立两种类型的连接。
控制连接 | 为文件传输下命令 |
数据连接 | 实现真正的文件传输 |
- 控制连接 TCP21端口
- PORT连接 TCP20端口
- 数据连接 看FTP-DATA协议
1. 控制连接
客户端希望与FTP服务器建立上传下载的数据传输时,它首先向服务器的TCP 21端口发起一个建立连接的请求,FTP服务器接受来自客户端的请求,完成连接的建立过程,这样的连接就称为FTP控制连接。
2. 数据连接
FTP控制连接建立之后,即可开始传输文件,传输文件的连接称为FTP数据连接。FTP数据连接就是FTP传输数据的过程,它有两种传输模式
PORT(主动)方式的连接过程是:
客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:
客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。
原文链接:https://blog.csdn.net/qq_44919483/article/details/89470473
3 用户名和口令的明文传输
FTP的一个突出问题是它以明文方式发送用户名和口令,即不加密地发送。任何人只要在网络中合适的位置放置协议分析仪就可以捕获用户名和口令。FTP发送的数据也是以明文方式传输,通过对FTP连接的监控和数据收集就可以收集和重现FTP的数据传输并实现协议连接回放。
事实上很多用户把相同的用户名和口令用在不同的应用中,如果黑客收集到FTP口令,他们可能就得到了这些在线账号或者其他一些机密数据的口令。
FTP用来传送文件信息,可以提供可靠性,稳定性,因为FTP使用TCP作为传输层协议。
FTP的应用
TCP网络数据包的组成部分,数据包分片与重组功能
https://blog.csdn.net/baidu_41592938/article/details/104462451
https://www.cnblogs.com/echo579/articles/6802120.html
中山大学实验课:https://max.book118.com/html/2018/0611/172088930.shtm
FTP分析协议答案
FTP软件
实验2-4 FTP协议分析
实验步骤
wireshark如何抓取本机包
在进行通信开发的过程中,我们往往会把本机既作为客户端又作为服务器端来调试代码,使得本机自己和自己通信。但是wireshark此时是无法抓取到数据包的,需要通过简单的设置才可以。
具体方法如下:
1.以管理员身份运行cmd
2.route add 本机ip mask 255.255.255.255 网关ip
如:route add 172.16.51.115 mask 255.255.255.255 172.16.1.1
使用完毕后用route delete 172.16.51.115 mask 255.255.255.255 172.16.1.1删除,否则所有本机报文都经过网卡出去走一圈回来很耗性能。
此时再利用wireshark进行抓包便可以抓到本机自己同自己的通信包,这样配置的原因是将发往本机的包发送到网关,而此时wireshark可以捕获到网卡驱动的报文实现抓包。
但这样有一个缺点,那就是本地请求的URL的IP只能写本地的IP地址,不能写localhost或127.0.0.1,写localhost或127.0.0.1还是抓不到包。
原文链接:https://blog.csdn.net/oguro/article/details/73739363
据说用Rawcap也可以抓到。