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

FTP相关文章:html

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

 

1、为何写这个

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

期间不会弹出输入用户名密码来登陆的窗口。服务器

 

今天我主要是有点好奇,在此过程当中,到底是否是用匿名帐户“anonymous”该帐户登陆了,仍是根本不须要登陆呢?tcp

因而用wireshark抓包了一下。post

 

2、抓包过程

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

果真发现是发送了USER anonymous命令的。.net

 

3、ftp的基础知识

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

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端口发送链接请求,创建一条数据链路来传送数据。

 

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

 

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

一、操做记录

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

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

 

二、抓包分析

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链接断开由服务器端发起。

 

5、我的一点感悟

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

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

以下:

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

 

 6、一些参考资料

Wireshark数据抓包分析之FTP协议

 

 ftp两种模式详解

相关文章
相关标签/搜索