您的位置:首页 > 编程语言 > PHP开发

wireshark抓包分析之ftp协议的分析

2015-05-19 20:21 489 查看
今天刚刚申请了一个虚拟主机,上传数据成为问题,Google一下,呵呵哒,看到了flashfxp这个软件,这个叫什么鬼东西,原谅小客的英语烂到了极点,下载安装后,最近正好对协议分析很是感兴趣呀,于是,就有了今天这篇处女座的文章,呵呵,个人总是爱说些废话

,好吧,如果你也这么觉得的话,那咱们就进入正题吧!

wireshark 抓包分析

协议 FTP协议的数据包分析与总结

本文主要是针对在wireshark中的对FTP的数据包的分析,不包含对协议本身的深入分析。

wireshark的基本应用在这里就不在赘述 了,个人也是个小菜,而且还有点坑的节奏,是吧,至少别人都这么说的,建议大家看这本书《wireshark数据包分析实战(第二版)》人民邮电出版社出版。

下面开始我们的正题:

打开flashfxp软件,打开wireshark抓包分析工具,开始抓包分析,连接虚拟主机,在虚拟主机中找到一个文件,然后下载到本地,断开ftp服务连接,停止wireshark抓包分析工具。

既然是对ftp感兴趣,那当然也是要对ftp的数据包进行分析了,开始分析这个很懒但是却很聪明的协议吧:

我们在显示过滤器中输入过滤条件为:ftp(注意这里我们应该知道ftp协议时基于tcp协议的,ftp是在tcp协议中的一部分,当设备识别是看到tcp协议中有ftp协议字段的部分,就将这个tcp协议识别为ftp协议),我们可以看到,经过显示过滤器的过滤,关于ftp协议的控制通道的数据内容我们可以看的一清二楚了,

以下就是对每个数据包的分析过程:



呃呃呃?

好吧,让你失望了,我们是不能先进行ftp控制通道的数据包分析的,唉,疏忽了,原谅我的第一次把,如上图所示,我们在显示过滤器中输入我的虚拟主机的ip,然后进行过滤,我们可以看到整个ftp连接的过程了,下面进行分析我们的报文:

首先,因为ftp是基于tcp传输的,其实是在tcp内部,属于tcp的一部分,只不过是,有了这一部分,我们就吧tcp的数据包认为是ftp的数据包了。

可以看到前三个数据包是tcp的三次握手的连接过程,

这里我们可以看到tcp连接的是ftp服务器的21端口,这也提醒了我们ftp使用的端口是21,而我的客户机就直接使用了自动分配的端口了,我们来分析一下tcp的连接过程,可以看到,flags:0x002(syn),这就表示这是一个tcp的请求的报文,而在序列号中(sequence number:0(relative sequence number))表示这是一个相对的序列号,因为是第一次建立握手的过程,这里就是0,


这是第二个tcp报文,这里我们可以看到,syn置为了1,而且ack也置为了1,这就表示这是一个应答报文,并为发送了一个对科幻段的请求报文,这是tcp链接的第二次握手,,这里的sequence number 置为了1,表示相对的序列号为1,也就是第二次的握手过程,至于第三次的握手过程,同理与第二次,只不过是不在请求,而是只是有应答报文。以上为tcp的建立连接的过程,有点赘述了。

ftp会话的过程的描述:

tcp的连接建立起来以后,服务器主动连接了客户机,至于服务器的主动连接还是被动连接,我是不太清楚的,为什么服务器要这样连接客户机,而不是让客户机去连接服务器,这里的主动与被动我们应该认为是相对于服务器来说的,而不是客户机。

首先,服务器发给客户机一个对本机的操作的系统的描述,微软的ftp服务器

客户机发送请求,输入了用户名

服务器响应客户机说需要用户名的密码

客户机发送密码给服务器,

服务器用户名和密码验证成功,允许客户机登录ftp服务器

 feat命令是用来请求FTP服务器列出它的所有的扩展命令与扩展功能的。属于主动模式命令!  (借鉴来的,是在忘记了当初老师是怎么讲的了)

按照上面所说的,这里的显示应该是对应的服务器支持的拓展功能吧

下面一条报文的意思是对上面的433号报文的一个应答(这里个人认为应该是没有了ftp中的报文的部分,二ftp又是基于tcp的,所以显示为了tcp报文)

size (这个是本人没有弄明白的地方,欢迎大家给出解答,查了资料,却没有找到)

pwd 客户算请求主机要显示用户所在的路径,

服务器显示客户所在的路径
以下引用来自http://www.cnblogs.com/zh2000g/archive/2010/03/02/1676653.html

PORT模式,是客户端通过PORT命令告诉服务器端要使用的数据端口号,然后在客户端主动建立起这个端口的TCP/IP监听。在进行文件传输的操作时,服务器来连接客户端的这个数据端口,进行数据传输。
PASV模式,是客户端通过PASV命令来告诉服务器端,想使用PASV方式传输数据。服务器收到命令之后,主动在服务器端建立一个数据端口的TCP/IP监听,并把这个数据端口号返回客户端。在进行文件传输的操作时,客户端去连接服务器端的这个数据端口,进行数据传输。
表明了,这个客户机向服务器发送了监听,告诉服务器想使用pasv 的方式进行连接
服务器回答为进入主动的连接模式,表示要服务器主动跟客户机连接

再次建立tcp连接的过程,这个过程是为了数据的传输用的,连接建立完毕以后
客户机请求服务器显示所有的目录
数据连接已经建立,
显示数据连接后的目录,打开ftp-data的报文就会发现,这里显示了在ftp服务器上的根目录下的所有的子文件夹

数据连接的建立完成。数据传输完成,这里我们需要注意的是,在ftp传出的过程中,ftp没传输一个数据(文件)就要建立一个连接,这样的话,也就是说,我们在用ftp进行数据传输的过程中,我们的很大的一部分时间是用来做连接用的,如果我们的文件数量比较多,这样的话,我们就建议大家要把文件压缩以后再用ftp进行数据传输,这样,就可以减少数据连接建立的次数,从而减少了数据的传输时间。



以下的命令为,打开web的文件夹 cwd

服务器命令执行成功,并返回客户端

显示目录

客户端再次请求建立pasv模式,方法请见上面的说明。
请求成功,再次建立服务器的主动的连接

需要注意的这里的服务器返回给客户端的是一个ip地址(自己的ip地址,也就是虚拟主机的ip,后面的连个数字表明服务器端要为客户机打开的端口号,这里的计算方法为,前面的数字*256+后面的数字,得到最后的客户机要连接服务器是服务器的端口号)

 
连接建立,数据传输
其中的:
RETR和STOR命令是FTP协议中的下载和上传命令, 可以针对文件和目录.
这里出现了retr命令也就是对web.html的下载操作了
传输(下载)的6个数据包,完成了web.html的下载
连接完成,断开连接
最后为ftp控制通道的连接的断开,在这期间,我们应该知道,ftp的控制链接是一直在进行中的,可以看到最后的控制链接才断开。

本人小菜一枚,没有实际的经验,所以文章写的有点摸不着头脑,很凌乱,但是我是想一点点的积累,使自己的知识储备的越来越丰富,希望大家多多指教,初次写稿,欢迎提出宝贵建议。
最后推荐大家看一下另外的大神写的blog,希望大神不要告我盗链啊!

点击打开链接http://network.51cto.com/art/201406/441747.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息