FTP协议的粗浅学习--利用wireshark抓包分析相关tcp连接

FTP相关文章:

Linux上的ftp服务器 vsftpd 之配置满天飞--设置匿名用户访问(不弹出用户名密码框)以及其他用户可正常上传

 

一、为什么写这个

昨天遇到个ftp相关的问题,关于ftp匿名访问的。花费了大量的脑细胞后,终于搞定了服务端的配置,现在客户端可以像下图一样,直接在浏览器输入url,即可直接访问。

期间不会弹出输入用户名密码来登录的窗口。

 

今天我主要是有点好奇,在此过程中,究竟是否是用匿名账户“anonymous”该账户登录了,还是根本不需要登录呢?

于是用wireshark抓包了一下。

 

二、抓包过程

我这边直接用了捕获过滤器抓本机和ftp之间的包。抓包后直接ctrl+F进行文本查找。

果然发现是发送了USER anonymous命令的。

 

三、ftp的基础知识

来源于:https://blog.csdn.net/iloli/article/details/5805262

FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。

PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。

 

总结来说,主动模式时,由客户端提供数据传输端口。。被动时,由服务器端提供数据传输的端口。

 

四、ftp基础的几个命令进行抓包分析

1、操作记录

在windows的cmd里面,一般默认就是有ftp命令的。

操作步骤很简单,只是匿名用户登录,查看目录下文件,然后退出登录。

 

2、抓包分析

2.1建立连接

前面几个抓包为建立连接。

 

然后是服务端发回的响应:(请求的包没看到,不知道是不是对应我上面的ftp 10.10.20.2操作)

 

2.2登录操作:

 

然后是登录成功的响应:

 

2.3 ls命令请求包

接下来是ls命令触发的一个包:

该包主要是客户端向服务端发起的一个请求。

当 PORT 命令被提交时,它指定了客户端(10.15.4.46)上的一个端口而不是服务器的。

该端口号的计算规则就是:211*256 + 220 = 54236,211与220也就是下面红框标识出来的数字的最后两位.

 

下面是服务器端的响应,表示连接已建立。再下面一条是客户端发送的ls命令,查看目录下的文档。

 

2.4 服务端建立单独连接来发送ls的返回数据

 再下来是服务端要返回数据了,于是主动向客户端的54236端口请求建立tcp连接。(就是上面计算出来的那个)

 

 

见下图,这期间,夹杂了原有的21端口与客户端的连接的响应消息。

 

2.5 ls的数据传输及连接断开

连接断开分了两部分,一部分是ftp层面的。一部分是tcp层面的连接断开。

其中tcp连接断开由服务器端发起。

 

五、个人一点感悟

以前面试腾讯时,被问过tcp粘包相关的问题。问到说ftp是怎么解决粘包的。

当时没答上来。后来才知,ftp的每个包都在包的结尾用了\r\n进行标识。

如下:

其中的0d、0a在asicc中就是回车、换行的意思。

 

 六、一些参考资料

Wireshark数据抓包分析之FTP协议

 ftp两种模式详解

posted @ 2018-10-31 11:35  三国梦回  阅读(7426)  评论(0编辑  收藏  举报