当前位置: 首页 > 编程日记 > 正文

简单文件传输协议TFTP分析还原

 介绍TFTP协议及传输内容的还原。


TFTP,全称为Trivial File Transfer Protocol,即简单文件传输协议,是一个用来在客户端与服务器之间进行简单文件传输的协议,UDP承载,它真的很简单。其协议标准为RFC1350,以及一系列补丁RFC。


01

协议介绍


TFTP有如下特征:

1、UDP承载,请求端口固定为69;

2、没有列出目录内容功能;

3、无验证和加密机制;

4、仅有读取或写入文件功能;

5、支持三种不同的传输模式:"netascii","octet"和"mail",其中第三种已废弃。


TFTP会话流程如下:

1、客户机A送一个读请求(RRQ)或写请求(WRQ)包给服务器B,包含了文件名和传输模式;

2、B向A发一个ACK包应答,同时也通知了A其余送往B包应该发送的端口号;

3、源主机向目的主机送编过号的数据包,除了最后一个都应该包含一个全尺寸的数据块。目的主机用编号的ACK包应答所有的数据包;

4、最终的数据包必须包含少于最大尺寸的数据块以表明这是最后一个包。如果被传输文件正好是尺寸块的整数倍,源主机最后送的数据包就是0字节。


很多软件都内嵌了TFTP功能。

0?wx_fmt=png

(上图来自网络)


TFTP数据包的前两个字节为Opcode,不同的值代表不同的数据类型,协议共定义了五种类型:

1、 读文件请求:Read request(RRQ),对应Opcode字段值为1

2、 写文件请求:Write requst(WRQ),对应Opcode字段值为2

3、 文件数据:Data(DATA),对应Opcode字段值为3

4、 回应:Acknowledgement(ACK),对应Opcode字段值为4

5、 错误信息:Error(ERROR),对应Opcode字段值为5



02


协议解析


TFTP按数据包类型进行解析,不同类型格式不同。

0?wx_fmt=png


读文件和写文件请求格式如下:

0?wx_fmt=png

一个读文件请求例子如下:

0?wx_fmt=png

一个写文件请求例子如下:

0?wx_fmt=png

文件数据格式:

0?wx_fmt=png

一段文件数据报文例子如下:

0?wx_fmt=png


回应格式:

0?wx_fmt=png

一个回应报文如下:

0?wx_fmt=png

错误信息格式:

0?wx_fmt=png


对还原TFTP传输的文件内容,关键点是:

1、文件数据与文件请求不在一条链内,它们通过客户机所用的端口建立关联,文件名在文件请求报文内。

2、文件数据需要根据Block值进行拼接,才能构成一个完整的文件。

3、文件数据块的Block值从1开始,由于UDP的不可靠性,需要在内容拼接时根据Block值去除重传内容以及进行排序。



对TFTP协议的介绍就到这里了,在Wireshark官网,有TFTP的pcap供下载学习,如果有疑问,可以联系我共同探讨。

0?wx_fmt=jpeg

长按进行关注。





相关文章:

Oracle中的字符处理方法

向左补全字符串lpad(字段名,填充长度,填充的字符) select lpad(1,4,0) from dual; 向右补全字符串rpad(字段名,填充长度,填充的字符) select rpad(1,4,0) from dual; 返回字符串小写select lower(STUDENT) from dual; 返回字符串大写select upper(admin) from dual; 单词首字符…

fwt优化+树形DP HDU 5909

1 //fwt优化树形DP HDU 59092 //见官方题解3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/4 5 #include <bits/stdc.h>6 // #include <iostream>7 // #include <cstdio>8 // #include <cstdlib>9 // #include <algorithm> 10 // #inclu…

iOS直播(二)GPUImage音视频采集

上文中介绍了用AVFoundation实现音视频采集&#xff08;https://blog.csdn.net/dolacmeng/article/details/81268622&#xff09; &#xff0c;开源的基于GPU的第三方图像处理库GPUImage对AVFoundation进行了进一步的封装&#xff0c;打开GPUImgeVideoCamera.m查看代码&#xf…

Wireshark使用技巧:提取VOIP通话中的音频流

“Wireshark的RTP流分析功能实战。”在VOIP协议的分析过程中&#xff0c;常常会遇到一些标准协议承载的语音传输&#xff0c;如以SIP、H.323为控制协商协议&#xff0c;RTP为语音数据协议的VOIP传输情况。在语音协议的分析过程中&#xff0c;需要提取的一个重要项是语音内容&am…

在预装win8的电脑上换win7系统讲解

现在买电脑&#xff0c;如果电脑预装的系统是win8系统&#xff0c;那么这个电脑的默认启动模式应该就是UEFI模式&#xff0c;现在UEFI模式正在逐渐取代传统模式。UEFI启动需要一个独立的分区&#xff0c;它将系统启动文件和操作系统本身隔离&#xff0c;可以更好的保护系统的启…

iOS直播(三)GPUImage音视频采集并写入文件

上一篇介绍了用GPUImage图像处理库进行图像采集&#xff0c;从而避免了直接使用AVFoundation&#xff08;AVKit&#xff09;时繁琐的代码&#xff0c;同时不用熟悉OpenGL ES也可以快速地对图像进行美颜、添加滤镜等。这一篇介绍如果使用多个滤镜以及录制视频&#xff0c;并保存…

使用Wireshark进行DNS协议解析

“ DNS协议格式解析及说明。”DNS即域名系统&#xff08;Domain Name System&#xff09;&#xff0c;是用来将域名与IP地址建立映射的协议&#xff0c;通过DNS协议&#xff0c;可以方便记忆。DNS可基于TCP或UDP&#xff0c;使用53号端口&#xff0c;常见的是使用UDP承载&#…

iOS直播(四)对视频进行压缩编码

1.为什么要进行编码? 不经过压缩编码的原视频&#xff0c;所占空间大&#xff0c;不便于保存和网络传输&#xff0c;所以视频录制完后&#xff0c;需要先编码&#xff0c;再传输&#xff0c;解码后再播放。 2.视频为什么可以被压缩&#xff1f; 视频存在冗余信息&#xff0…

nRF51800 蓝牙学习 进程记录 2:关于二维数组 执念执战

前天在玩OLED时想完成一直想弄得一个东西&#xff0c;就是简单的单片机游戏。因为STM32和nRF51822的内存足够&#xff0c;所以就用缓存数组的方法来显示图像&#xff08;我也不知道术语是啥&#xff0c;反正就是在内存中建立一个128X64的二维数组&#xff0c;更新显示时将整个数…

.net卸载程序制作

.net卸载程序制作 原文:.net卸载程序制作方法一&#xff1a; 在打包项目中添加文件msiexec.exe(一般在c:\windows\system32(系统目录中)找到)。 在文件系统视图中选择应用程序文件&#xff0c;在msiexec.exe上单击右键选择“创建快捷方式”&#xff0c;重命名快捷方式为“unins…

Windows下的DNS命令用法

“Windows下DNS相关命令的用法。”在协议分析过程中&#xff0c;经常会遇到一种情况&#xff0c;一次对某域名抓包的过程中&#xff0c;抓到了某个域名的DNS请求&#xff0c;之后再抓包&#xff0c;却抓不到的情况。这时候就需要DNS命令出马了&#xff0c;本文介绍Windows下的D…

Kafka集群配置说明

#kafka数据的存放地址&#xff0c;多个地址的话用逗号分 log.dirs/tmp/kafka-logs #broker server服务端口 port9092 #这个参数会在日志segment没有达到log.segment.bytes设置的大小&#xff0c;也会强制新建一个segment会被 topic创建时的指定参数覆盖 log.roll.hours24 #是否…

Tomcat漏洞说明与安全加固

Tomcat是Apache软件基金会的一个免费的、开放源码的WEB应用服务器&#xff0c;可以运行在Linux和Windows等多个平台上&#xff0c;由于其性能稳定、扩展性好、免费等特点深受广大用户的喜爱。目前&#xff0c;互联网上绝大多数JAVA WEB应用都运行在Tomcat服务器上。 Tomcat作为…

《人性的优点》笔记

1.相信自己&#xff0c;做一个成功的人 2.《圣经》中说&#xff1a;“攻克己心&#xff0c;强如攻城” 3.人最大的敌人&#xff0c;不是别人&#xff0c;正是自己 4.不要为木已成舟的事情耗费太多的心血&#xff0c;你无法改变它 5.忧虑是健康的大敌&#xff0c;它只会让你的生…

SIP协议分析

“ 音视频通话控制协议SIP介绍。”SIP&#xff08;Session Initiation Protocol&#xff09;&#xff0c;即会话发起协议&#xff0c;在RFC2543、RFC3261等中被定义&#xff0c;是一个VOIP信令协议&#xff0c;其目的是在IP网络中实现电话功能&#xff0c;即软电话功能。在互联…

Struts2的工作原理

Struts2是在Struts1的基础上发展而来的&#xff0c;Struts是WebWork和Struts1的集合&#xff0c;采用的正是WebWork的核心&#xff0c;更多的是WebWork。 下载的Struts2源代码文件 主要的包和类&#xff1a; 包名 说明 org.apache.struts2. components 该包封装视图组件&…

Tiny4412 Uboot

1. Build uboot a) 安装好toolchain (arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz)并设置好 环境变量PATH&#xff0c;保证可以正常使用。 b) 解压 uboot_tiny4412-20130729.tgz 并进入相应的目录 tar xzf uboot_tiny4412-20130729.tgz c) 配置 uboot 并编译 cd uboot_tiny4412 m…

iOS逆向(1)——利用ipa重签名,3分钟iPhone安装多个微信

本文要达成如图效果&#xff0c;在一台iPhone上安装第二个微信&#xff1a; 准备&#xff1a; Xcode微信ipa&#xff08;可通过iTool进行下载&#xff09;重签名脚本 步骤 打开Xcode&#xff0c;新建Single View App项目&#xff0c;名字可以随意&#xff0c;这里就用Wech…

使用Fiddler进行HTTP流量分析

“ Fiddler抓包工具使用。”Fiddler作为一个PC端的HTTP/HTTPS协议分析工具&#xff0c;能够抓取PC上的流量&#xff0c;并且它对HTTP类数据的分析&#xff0c;要比Wireshark要简单&#xff0c;友好&#xff0c;它对数据的组织格式很好地提高了分析效率。本文介绍如何在PC上使用…

Java学习笔记(二一)——Java 泛型

【前面的话】 最近脸好干&#xff0c;掉皮&#xff0c;需要买点化妆品了。 Java泛型好好学习一下。 【定义】 一、泛型的定义主要有以下两种&#xff1a; 在程序编码中一些包含类型参数的类型&#xff0c;也就是说泛型的参数只可以代表类&#xff0c;不能代表个别对象。&#x…

GitHub与Git入门

一、GitHub GitHub为开发者提供Git仓库的托管服务&#xff0c;可以进行代码共享、团队协同开发&#xff0c;创建了社会化&#xff08;social coding&#xff09;编程的概念。 二、GitHub与Git的区别 开发者将源代码存入“Git”仓库&#xff0c;而GitHub则在网络上提供Git仓库…

《UML大战需求分析》阅读笔记1

通过阅读本书的序和第一章&#xff0c;让我对于UML的理解更加深刻了&#xff0c;并且懂了怎样把你UML学的更好。 作者先让我们明白什么是UML&#xff0c;大概知道了UML各个图的形态和各种用途&#xff0c;然后再详细的介绍各个图怎样使用。 UML是个非必要的建模工具&#xff0c…

裸奔的支付X聊天,你还敢用吗?

“ 一直想在社交领域突破的某付宝&#xff0c;却自始至终对社交功能如此的不用心&#xff0c;让用户的数据在网络中裸奔&#xff0c;使用户不寒而栗。”没错&#xff0c;这篇文章要说的就是BAT中A家的支付X&#xff0c;那个千方百计做社交的支付工具。如果你使用了它的聊天窗口…

MVC3项目依赖文件错误解决

MVC3的项目依赖分为两大类&#xff1a; 1、ASP.NET Web Pages 2、ASP.NET MVC 3 如果没有正确引入&#xff0c;或者项目的版本有错误会出现程序集引用错误。 在服务器上部署时&#xff0c;解决思路如下&#xff1a; 1、下载MVC3的安装包&#xff0c;然后在服务器上安装&#xf…

让自己的开源项目支持CocoaPods集成

平时我们会经常用CocoaPods集成第三方库&#xff0c;那如何使自己的代码也可以通过CocoaPods集成呢&#xff1f;只需要简单几步&#xff1a; 创建git仓库&#xff0c;把代码提交到Github或码云等在git仓库中创建.Podspec文件&#xff0c;修改里面的配置&#xff08;如代码的版…

由于客户端检测到一个协议错误 代码0x1104

重新连接N次都还是这个错误提示&#xff0c;最后再重起电脑&#xff0c;还是没用。研究了一下错误终于解决了。 首先检查远程连接端口对不对&#xff1f;Windows远程默认的连接端口是3389&#xff0c;一般大家连接时直接输入IP或域名就可以连接了。如果还要加:端口号的话&#…

使用Fiddler抓取手机HTTP流量包

“ Fiddler手机流量抓包实战。”Fiddler作为一个PC端的HTTP/HTTPS协议分析工具&#xff0c;不仅能够抓取PC上的流量&#xff0c;还能作为代理&#xff0c;抓取手机流量&#xff0c;在之前的文章《使用Fiddler进行HTTP流量分析》中介绍了Fiddler的基本用法&#xff0c;本文介绍如…

Spark Steaming 点滴

Spark Streaming 模块是对于 Spark Core 的一个扩展&#xff0c;目的是为了以高吞吐量&#xff0c;并且容错的方式处理持续性的数据流。目前 Spark Streaming 支持的外部数据源有 Flume、 Kafka、Twitter、ZeroMQ、TCP Socket 等。Discretized Stream 也叫 DStream) 是 Spark S…

CocoaPods远程私有库

上一篇&#xff08;让自己的开源项目支持CocoaPods集成&#xff09;介绍了将自己开发的框架代码发布到Cocoapods&#xff0c;全球的开发者都可以通过pod search搜索到我们的框架代码以及通过pod install进行安装。但有时候我们希望只有我们项目内部的人才可以集成和修改&#x…

大数据平台的秘密

大数据&#xff0c;这个词越来越热&#xff0c;很多人都在谈大数据&#xff0c;其实很多张口闭口大数据的人&#xff0c;或许都不知道数据是如何产生、传递、存储、运算到应用。有段时间&#xff0c;看到一些大数据文章&#xff0c;就感觉纯属凑热闹&#xff0c;小数据都没搞明…