教你编程实现TFTP协议.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

教你编程实现TFTP协议

Scuhkr/古开元四川大学信息平安研究所

前言:

不管你是热衷于黑客技术的爱好者,还是从事编写网络应用程序的程序员,都需要掌握熟练的编程能力,以及具备扎实的TCP/IP协议的扎实根底.很多初学者都有这样的经历,要么是能编一些复杂算法的程序,却不能结合到实际的应用中,要么就是三卷W.RichardStevens的圣经《TCP/IP详解》熟记于胸,却无法用熟悉的编程语言将其实现.这真是件很令人郁闷的事.出于这样的目的,本文就结合TCP/IP协议中的TFTP协议来分析,并简单实现了Windows下TFTP的效劳器和客户端.

(致编者:请务必加上以下声明)

注:本文大局部理论引用于TCP/IP详解卷一和中国协议分析网)

一、协议分析:

TFTP(TrivialFileTransferProtocol)即简单文件传送协议,是TCP/TP协议族中的一个用来在客户机与效劳器之间进行简单文件传输的协议,提供不复杂的,开销不大的文件传输效劳.为了保持简单和短小,TFTP使用UDP协议,且默认端口号为69,它不提供可靠的数据流传输效劳,也不提供存取授权与认证机制,使用超时重传方式来保证数据的到达.与FTP相比,TFTP的大小要小的多,它主要用于小文件的传输,只能从文件效劳器上获得或写入文件,不能列出目录.更多的资料可以参考RFC1350.

下列图一给出了5种TFTP报文格式。

图一5种TFTP报文格式

结合图一,我们可以看到,TFTP报文的头两个字节表示操作码。对于读请求〔RRQ〕和写请求〔WRQ〕,文件名字段说明客户要读或写的位于效劳器上的文件。这个文件字段以0字节作为结束。模式字段是一个ASCII码串netascii或octet〔大小写可任意组合〕,同样以0字节结束。netascii表示数据是以成行的ASCII码字符组成,以两个字节—回车字符后跟换行字符〔称为CR/LF〕作为行结束符。这两个行结束字符在这种格式和本地主机使用的行定界符之间进行转化。octet那么将数据看作8bit一组的字节流而不作任何解释。

每个数据分组包含一个块编号字段,它以后要在确认分组中使用。以读一个文件作为例

子,TFTP客户需要发送一个读请求说明要读的文件名和文件模式(mode)。如果这个文件能被这个客户读取,TFTP效劳器就返回一个块编号为1的数据分组。TFTP客户又发送一个块编号为1的ACK。TFTP效劳器随后发送块编号为2的数据。TFTP客户发回块编号为2的ACK。重复这个过程直到这个文件传送完。除了最后一个数据分组可含有缺乏512字节的数据,其他每个数据分组均含有512字节的数据。当TFTP客户收到一个缺乏512字节的数据分组,就知道它收到最后一个数据分组。

在写请求的情况下,TFTP客户发送WRQ指明文件名和模式。如果该文件能被该客户写,TFTP效劳器就返回块编号为0的ACK包。该客户就将文件的头512字节以块编号为1发出。效劳器那么返回块编号为1的ACK。

最后一种TFTP报文类型是过失报文,它的操作码为5。它用于效劳器不能处理读请求或写请求的情况。在文件传输过程中的读和写过失也会导致传送这种报文,接着停止传输。过失编号字段给出一个数字的过失码,跟着是一个ASCII表示的过失报文字段,可能包含额外的操作系统说明的信息。

根据图一及上面的分析,我们可以得到以下定义:

#define TFTP_RRQ 01 //读请求

#define TFTP_WRQ 02 //写请求

#define TFTP_DATA 03 //数据包

#define TFTP_ACK 04 //确认包

#define TFTP_ERROR 05 //错误代码

头文件结构也能很容易得到:

typedefstruct tftphdr{

USHORT tu_opcode; //操作码

union

{

USHORT tu_block; //块号

USHORT tu_code; //错误码

char tu_stuff[1]; //请求包填充物

}th_u;

char th_data[1]; //数据或错误字符串

}TFTP_HDR,*PTFTP_HDR;

二、TFTP效劳器的实现

不知道大家对两年前的冲击波病毒Msblast.exe是否还有印象,该病毒通过RPC远程溢出漏洞溢出目标主机后,会绑定目标主机的4444端口,然后利用windows系统自带的tftp客户端程序发送下载消息,目标主机通过tftp下载病毒再运行病毒,反复循环导致更多的计算机受到感染。因为windows系统并没有默认的TFT

文档评论(0)

展翅高飞2020 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档