看见FTP-FTP协议抓包实例!

617 阅读2分钟

这是我参与更文挑战的第8天,活动详情查看: 更文挑战

你也许难以想象,FTP协议在1971年就出现了。在那时,现代的网络模型还没有形成,所以FTP完全称得上网络界的活化石

一个古老的协议能有如此活力,一定是有深层原因的。FTP的过人之处,就在于它用最简单的方式实现了文件的传输。客户端只需要输入用户名和密码,就可以和服务器互传文件了;有的甚至连用户名和密码都不用(匿名FTP),FTP常被用来传播文件,尤其是免费软件;另一个广泛应用是采集日志,我们可以让服务器发生故障之后,自动通过FTP把日志传回厂商。这些场合之所以适合FTP而不是NFS或者CIFS,就是因为它实现起来更加简单。

从Wireshark可以看到,FTP是基于TCP三次握手

还有要注意的是,FTP的传输是没有加密的,所以用户名和密码都能被看见

客户端连接FTP服务器的21端口仅仅是为了传输控制信息,我们称之为“控制连接”。当需要传输数据时,就重新建立一个TCP连接,我们称之为“数据连接”。随着文件传输结束,这个数据连接就自动关闭了。不但在下载文件时如此,就连执行1s命令来列举文件时,也需要新建一个数据连接。在我看来这不是一种高效的方式,因为三次握手和四次挥手就用掉7个包,而1s命令的请求和响应往往只需要2个包,就像开着卡车去送快递一样不经济。

下面为下载一个文件的过程

如果你为FTP配置过防火墙,还会发现这种方式带来了一个更加严重的问题-—由于数据连接的三次握手是由服务器端主动发起的(我们称之为主动模式),如果客户端的防火墙阻挡了连接请求,传输不就失败了吗?碰到这种情况时,我建议你试一下FTP的被动模式。

理论上所有FTP客户端都应该支持这两种模式,但Windows自带的ftp命令似乎只支持主动模式。