前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java实现FTP协议:wireshark抓包解析

java实现FTP协议:wireshark抓包解析

作者头像
望月从良
发布2020-02-26 10:43:21
1.8K0
发布2020-02-26 10:43:21
举报
文章被收录于专栏:Coding迪斯尼Coding迪斯尼

本节我们看看ftp协议的数据包格式,同时使用代码加以实现。首先我们现在机器上安装ftp服务器,我在自己的机器上安装了QuickFTP Server,它是我随便找来的一款Mac ftp服务器,如下图所示,我将连接端口设置为2100,同时设置了用户名和密码,如此我们就可以通过抓包的方式了解协议的数据包格式:

然后打开wireshark,在过滤条件中输入tcp.port==2100,接着开始监听,如此就能抓取相应ftp数据包。接着我从手机上使用ftp客户端连接到服务器,同时使用设置好的用户名密码登陆,在wireshark上抓包结果如下:

注意到前3条是tcp连接的三次握手,第四条是双方沟通tcp数据传输一些参数可以忽略,真正属于ftp协议数据的是第5条服务器发送给客户端的信息,点击查看内如下:

我们注意看它的数据部分,那才是ftp协议的专有内容,首先开始对应回复码220,上一节我们描述过回复码三位数字的作用,该数值表示服务器已经准备好接收客户端的请求,接下来的字符串时服务器对该回复码的文字解释,在协议实现是不用关心。这里要注意的是,所有包含协议数据的数据包都对应[PSH,ACK],如果仅仅含有[ACK]那就是对上一次接收到数据包的应答而已,所以点击下一条[PSH,ACK]就可以看ftp协议的下一个数据包内容,于是我们点击查看下一条包含ftp数据的协议包:

数据内容以字符串”USER”开始,这表示客户端向服务器端提交用户名,而且用户名以明文字符串”chenyi”来表示。然后继续看下一条[PSH,ACK]数据包,其内容如下:

数据以331开头,该回复码在前几节解释过,它表示客户端的请求被接受,同时请求正在处理中,还需要执行后续步骤,它表示用户名正确但还需要提交密码,于是我们继续查看客户端发给服务器的下一条[PSH,ACK]数据包,其内容如下:

在数据部分以字符串”PASS”开始,这是操作命令,表示客户端向服务器提供密码,而且可以明确看到密码为1111,继续看服务器回复给客户端的[PSH,ACK]数据包:

数据部分以回复码230开始,该数值表示用户登录成功,所有操作将继续进行,再看下一个客户端发送给服务器的[PSH,ACK]数据包,可以看到数据内容仅仅是字符串”PWD”这是客户端在向服务器请求当前文件目录,由此查看服务器返回的[PSH,ACK]数据包:

回复数据首先是回复码257,它表示路径名确立,接着是”\“表示当前处于根目录,继续看下一条客户端回复给服务器的[PSH,ACK]数据包:

回复的数据只有操作命令”FEAT”,它表示让服务器列举当前目录下的文件内容,接下来看服务器回复的[PSH,ACK]数据包内容:

数据包含的回复码为211,他表示服务器将返回包含系统信息的内容,继续看客户端回复的[PSH,ACK]数据包:

客户端回复给服务器的数据为”PASV”它表示客户端将以被动模式接收服务器数据,也就是让服务器等待客户端发起的数据请求,由此我们看下一条服务器回复的[PSH,ACK]:

数据起始以227开始,它是对上一条”PASV”请求的回应,它表示传输进入被动模式,特别需要注意的是数据中包含了用于数据传输的ip和端口号,其中ip就是192.168.2.243,这是服务器地址,接下来的两个字节数据用于计算数据传输端口,计算方法是17*256+222结果为4574,也就是客户端要连接服务器的4574端口去获取数据,下一次客户端将通过该端口号获得数据内容,继续往下看客户端发送的[PSH,ACK]数据包:

数据内容为”TYPE A”,这是客户端向服务器设定数据的传输格式,前面我们提到过ftp主要有两种数据传输格式,一种是基于ASCII的文本模式,另一种是基于二进制的模式,该命令表示数据传输使用ASCII文本模式,我们看下一条服务器返回的[PSH,ACK]:

数据的回复码为220,它表示命令请求完成,同时在解释字符串中它表明数据传输将使用ASCII吗模式,继续看客户端发送给服务器的下一条[PSH,ACK]:

客户端向服务器发送的请求命令为”LIST”,它要求枚举当前路径下的文件信息,于是我们继续看服务器返回的[PSH,ACK]:

服务器返回的回复码是150,它表示请求被接受,数据通道已经打开,此时我们要监听端口4574才能获得客户端和服务器通讯的数据,因此在wireshark上将过滤条件改为tcp.port==4574,这时可以看到双方tcp三次握手,接着就是服务器推送给客户端的信息:

内容显示的是当前路径下的文件信息,它采用了unix的文件列举格式,首先第一个字节表示文件类型,’-‘表示普通文件,’s’表示socket等,接下来rw———-表示文件的权限,前三个字符表示用户权限,接下来三个字符表示群权限,最后表示其他用户权限,‘-’表示不允许任何操作。接下来是数值表示链接数,继续下来的字符串表示文件所属用户及所在群,接下来的数字是文件大小,单位为字节,接下来是修改时间和文件名,格式具体内容可以搜索。

数据内容传输结束后tcp连接关闭,我们重新回到命令传输通道,可以看到服务器发来如下[PSH,ACK]数据包:

回复码为226,对应含义为数据传输连接关闭,从它附带的文本信息也得知,它表示数据传输完成。

以上就是对ftp协议的抓包分析

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coding迪斯尼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档