- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
教你编程实现TFTP协议.doc
教你编程实现TFTP协议
Scuhkr/古开元 四川大学信息安全研究所
前言:
不论你是热衷于黑客技术的爱好者, 还是从事编写网络应用程序的程序员, 都需要掌握熟练的编程能力, 以及具备扎实的TCP/IP协议的扎实基础. 很多初学者都有这样的经历, 要么是能编一些复杂算法的程序,却不能结合到实际的应用中, 要么就是三卷W.Richard Stevens的圣经《TCP/IP详解》熟记于胸, 却无法用熟悉的编程语言将其实现. 这真是件很令人郁闷的事. 出于这样的目的, 本文就结合TCP/IP协议中的TFTP协议来分析, 并简单实现了Windows下TFTP的服务器和客户端.
(致编者: 请务必加上以下声明)
注: 本文大部分理论引用于TCP/IP详解卷一和中国协议分析网)
一、协议分析:
TFTP(Trivial File Transfer Protocol)即简单文件传送协议, 是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则将数据看作8 bit一组的字节流而不作任何解释。
每个数据分组包含一个块编号字段,它以后要在确认分组中使用。以读一个文件作为例
子,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 // 错误代码
头文件结构也能很容易得到:
typedef struct 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系统并没有默认的TFTP服务
文档评论(0)