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

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

作者头像
望月从良
发布于 2020-02-26 02:43:21
发布于 2020-02-26 02:43:21
2K0
举报
文章被收录于专栏: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
tensorflow Image解码函数
Decode a PNG-encoded image to a uint8 tensor. 将一个png编码的图像解码成一个uint8张量。The attr channels indicates the desired number of color channels for the decoded image. 参数"channels"表示解码图像所需的颜色通道数量。
演化计算与人工智能
2020/08/14
5980
TensorFlow Plot (tfplot)
原文链接:https://tensorflow-plot.readthedocs.io/en/latest/api/index.html
狼啸风云
2019/08/18
1.5K0
TensorFlow风格指南
片刻
2018/01/05
8490
TensorFlow之estimator详解
在介绍Estimator之前需要对它在TensorFlow这个大框架的定位有个大致的认识,如下图示:
marsggbo
2019/07/23
1.9K0
TensorFlow之estimator详解
tf.summary.image
摘要最多有max_output包含图像的摘要值。图像由张量构成,张量必须为4-D,形状[batch_size, height, width, channels],通道可以是:
狼啸风云
2019/06/13
1.9K0
TensorFlow基础
TensorFlow 使用图来表示计算任务. 图中的节点被称之为 op (operation 的缩写). 一个 op 获得 0 个或多个 Tensor, 执行计算, 产生 0 个或多个 Tensor. 每个 Tensor 是一个类型化的多维数组. 例如, 你可以将一小组图像集表示为一个四维浮点数数组, 这四个维度分别是 [batch, height, width, channels].
百川AI
2021/10/19
7080
深度学习_1_Tensorflow_2_数据_文件读取
子线程读取数据 向队列放数据(如每次100个),主线程学习,不用全部数据读取后,开始学习
Dean0731
2020/05/08
8130
Tensorflow | 斯坦福cs20si | lecture1
上图的代码存在问题,目前不知道怎么修改。若是有朋友有修改方案,请在下方留言,谢谢!
努力在北京混出人样
2019/02/18
6740
tensorflow学习笔记(十三):conv3d
这是官方给的解释,还不如conv2d解释的详细呢,至少在介绍conv2d的时候还给了公式. 和conv2d对比一下:
ke1th
2019/05/26
1.9K0
简明机器学习教程(二)——实践:进入Tensorflow世界
经过了一年的休整,终于博客也要恢复原先坑着的系列了,《简明机器学习教程》也会恢复更新。说实在的,第二篇的原稿我其实在第一篇之后一星期就写出来了,但是后来因为原稿遗失与学业繁忙就一直拖了下来。历经一年,我对机器学习与这系列教程又有了些新的思考,所以我决定做出些许调整。首先,本系列不再单独分理论、实践篇,而是采用交织在一起的形式。其次,将matlab更换为tensorflow(python)。教程的定位依旧是面向初学者,所以会加入大篇幅的前置介绍。这篇就是为了之后内容而对tensorflow进行先行的介绍。
KAAAsS
2022/01/14
9520
简明机器学习教程(二)——实践:进入Tensorflow世界
[Tensorflow] TensorFlow之Hello World!(2)
TensorFlow入门的第一篇和大家聊了?graph图,op操作,node节点。对TensorFlow有了一个简单的认识,今天主要和大家分享的是TensorFlow中constant 常量, Variable变量,Placeholder占位符,Session启动图,fetches,feed等几个基本概念。 接下来我们通过一些简单的栗子分别来学习一下他们都是什么鬼。 # constant # 导入模块 import tensorflow as tf """ 怎么定义常量,常量的意思和我们平时理解的常量是一
用户1622570
2018/04/11
9910
[ Tensorflow]Tensorflow Reduction operations
reduce系列在平时工程中是经常使用的,其中reduce_sum是使用最频繁的一个。主要用在计算loss的时候,当我们定义好loss之后,我们一般要求loss最小,这时候就需要reduce系列。下面通过文档,我给大家简单介绍一下,不是特别难,但是不细心考虑一下,你可能永远觉得它是黑的。 其实人工智能AI,或者深度学习DL,我觉得并不是什么传说的黑科技,真正最后落在技术上的,是纯粹的计算,也没多么的高深莫测。(./不喜轻拍.sh).我有个想法就是把复杂的问题,简单化,简单的问题,通俗化。其实每次写文章,我都
用户1622570
2018/04/11
1.1K0
教程 | 如何使用TensorFlow中的高级API:Estimator、Experiment和Dataset
选自Medium 作者:Peter Roelants 机器之心编译 参与:李泽南、黄小天 近日,背景调查公司 Onfido 研究主管 Peter Roelants 在 Medium 上发表了一篇题为《Higher-Level APIs in TensorFlow》的文章,通过实例详细介绍了如何使用 TensorFlow 中的高级 API(Estimator、Experiment 和 Dataset)训练模型。值得一提的是 Experiment 和 Dataset 可以独立使用。这些高级 API 已被最新发布
机器之心
2018/05/08
3.4K0
教程 | 如何使用TensorFlow中的高级API:Estimator、Experiment和Dataset
TensorFlow基础知识
x1、x2 表示输入,w1、w2 分别是 x1 到 y 和 x2 到 y 的权重,y=x1w1+x2w2。
foochane
2019/10/14
7640
TensorFlow基础知识
TensorFlow 高效编程
TensorFlow 和其他数字计算库(如 numpy)之间最明显的区别在于 TensorFlow 中操作的是符号。这是一个强大的功能,这保证了 TensorFlow 可以做很多其他库(例如 numpy)不能完成的事情(例如自动区分)。这可能也是它更复杂的原因。今天我们来一步步探秘 TensorFlow,并为更有效地使用 TensorFlow 提供了一些指导方针和最佳实践。
ApacheCN_飞龙
2022/12/02
1.6K0
TensorFlow基本使用教程
TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。它是目前应用最广泛的机器(深度)学习框架,利用TensorFlow,你可以很快的构建深度学习模型,目前在工业界应用非常广泛,截止到目前最新版本是tf.1.11。
嵌入式视觉
2022/09/05
1.9K0
TensorFlow基本使用教程
译文 | 简明 TensorFlow 教程:所有的模型
01 概述 在本文中,我们将讨论 TensorFlow 中当前可用的所有抽象模型,并描述该特定模型的用例以及简单的示例代码。 完整的工作示例源码(https://github.com/camrongo
用户1332428
2018/03/08
1K0
译文 | 简明 TensorFlow 教程:所有的模型
TensorFlow应用实战 | 编写训练的python文件
一个错误的个人使用,因为我的TensorFlow版本较老。keras并没有被集成进来。
用户1332428
2018/07/30
6380
TensorFlow应用实战 | 编写训练的python文件
利用Tensorflow构建自己的物体识别模型(一)
利用Tensorflow训练搭建自己的物体训练模型,万里长征第一步,先安装tensorflow。
月小水长
2019/07/31
6080
利用Tensorflow构建自己的物体识别模型(一)
tf.summary.*函数
在TensorFlow中,最常用的可视化方法有三种途径,分别为TensorFlow与OpenCv的混合编程、利用Matpltlib进行可视化、利用TensorFlow自带的可视化工具TensorBoard进行可视化。
周小董
2019/03/25
1.6K0
相关推荐
tensorflow Image解码函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档