您的位置:首页 > 理论基础 > 计算机网络

网络协议TFTP

2016-09-07 23:51 225 查看
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议。和使用TCP的文件传输协议(FTP)不同,为了保持简单短小,TFTP使用了UDP。TFTP的实现(和它所需要的UDP、IP、和设备驱动程序)可以放入只读存储器中

TFTP是一个简单的协议,适合于只读存储器,仅用于无盘系统进行系统引导,它只使用几种报文格式,是一种停止等待协议

特点:
1、简单
2、占用资源小
3、适合传递小文件
4、适合在局域网进行传递
5、端口号为69
6、基于UDP实现

缺陷:
TFTP分组中并不提供用户名和口令。这是TFTP的一个特性(即"安全漏洞")。由于TFTP是设计用于系统引导进程,它不可能提供用户名和口令。
目前大多数TFTP服务器提供了一个选项来限制只能访问特定目录下的文件,这个目录中只包含无盘系统进行系统引导时所需的文件

#coding=utf-8

#进行对应包的引用
from socket import *

import struct

import sys

#创建一个套接字进行网络通信
soc =socket(AF_INET,SOCK_DGRAM)

#获取对应传递的ip地址参数
strIp=sys.argv[1]

#元组,放对应的ip地址和端口号
addr=(strIp,69)

#参数:现在文件的名字
strName=sys.argv[2]

#进行组包,提交给TFTP服务
sendData=struct.pack("!H"+str(len(strName))+"sb5sb",1,strName,0,"octet",0)

#数据的发送
soc.sendto(sendData,addr)

#初始化文件管理对象
fil=''

#下载后的文件重命名
filName=sys.argv[2]

while True:
#接受服务器的相应数据(内容,(ip,端口))
recvData,recvAddr=soc.recvfrom(1024)

#对接受的数据进行处理
opkey=struct.unpack("!HH",recvData[:4])

print(opkey)

#变量存储序号
pNum=opkey[1]

#3判断,从服务器上下载的数据
if opkey[0]==3:
#第一次数据传递时,进行对应的文件的创建
if pNum==1:
fil=open(filName,"w")
#数据的写入
fil.write(recvData[4:])

if len(recvData)<516:

fil.close()
print("下载完成!")
break

#5判断,TFTP服务器出现错误
if opkey[0]==5:
print("运行错误!")
break

#组包
ackData=struct.pack("!HH",4,pNum)

soc.sendto(ackData,recvAddr)
soc.close()


模拟实现TFTP下载客户端

---------------------附件struct表--------------------

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: