TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。

接下来了解下TFTP协议内容,

1:客户发送和服务端每次通信,都要携带2个字节操作码(包的类型),

2:模式有三种类型,除了文件名其他基本上固定

    (1)netascii,这是8位的ASCII码形式

    (2)octet,8位源数据类型

    (3)mail这种不在支

3:TFTP支持五种类型的包,根据不同操作不同解析

       

4:服务端把数据包发送到客户端,包括这次发送块数据的编号和数据一起发送到:客户端

5:客户端接收到数据,要向服务服务

看代码

 from socket import *
import struct
import time
udp_sock = socket(AF_INET,SOCK_DGRAM) #创建一个socket
#send_data = 0x01612E706E67006f6374657400
ip = ("192.168.1.10",69)
send_data = struct.pack("!H5sb5sb",1,b"a.png",0,b"octet",0)#将数据打包成二进制字符串
udp_sock.sendto(send_data,ip)#向服务器发送请求下载
while True:
data,addr = udp_sock.recvfrom(1024)#接收服务端的数据
data_len = len(data)
send_data = struct.unpack("!HH",data[:4])#把二进制转换成数据
if send_data[0] == 3:#3表示服务端发送过来的数据包
if send_data[1] == 1:
f = open("b.png","wb+")
f.write(data[4:])#数据包前4个字节是操作码和块编号,之后的就是实际数据
ack_data = struct.pack("!HH",4,send_data[1])#这里的4确认码 send_data[1]是服务端发过来的块编号
udp_sock.sendto(ack_data,addr)#向服务发送数据表示确认收到数据
if data_len<516:
f.close()
print("下载完成")
break
elif send_data[0] == 5:
print("下载失败")
break
udp_sock.close()

python简单实现tftp客户端(基于udp)的更多相关文章

  1. python 之 网络编程(基于UDP协议的套接字通信)

    8.5 基于UDP协议的套接字通信 UDP协议:数据报协议 特点:无连接,一发对应一收,先启动哪一端都不会报错 优点:发送效率高,但有效传输的数据量最多为500bytes 缺点:不可靠:发送数据,无需 ...

  2. python实现简单tftp(基于udp)

    tftp是基于udp的协议 实现简单的tftp,首先要有tftp的协议图. tftp默认接收端口为69,但每次有连接过来后,tftp会随机分配一个端口来专门为这个连接来服务. 操作码:1.上传 2.下 ...

  3. linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)

    单客户端和服务端的通信(基于UDP)   代码 服务端代码socket3.c #include<sys/types.h> #include<sys/socket.h> #inc ...

  4. python网络-TFTP客户端开发(25)

    一. TFTP协议介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议) 是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议 特点: ...

  5. TFTP协议介绍-python实现tftp客户端

    1. TFTP协议介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议) 是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议 特点: ...

  6. UNIX网络编程——分析一帧基于UDP的TFTP协议帧

    下图是UDP的段格式: 相比TCP段格式,UDP要简单得多,也没啥好说的,需要注意的是UDP数据长度指payload加上首部的长度. 下面分析一帧基于UDP的TFTP协议帧: 以太网首部 0000: ...

  7. python 全栈开发,Day34(基于UDP协议的socket)

    昨日内容回顾 网络的基础概念arp协议 :通过ip地址找到mac地址五层模型 : 应用层 传输层 网络层 数据链路层 物理层tcp协议 : 可靠的 面向连接 全双工 三次握手 四次挥手udp协议 : ...

  8. 分析一帧基于UDP的TFTP协议帧

    下图是UDP的段格式: 相比TCP段格式,UDP要简单得多,也没啥好说的,需要注意的是UDP数据长度指payload加上首部的长度. 下面分析一帧基于UDP的TFTP协议帧: 以太网首部 0000: ...

  9. TCP/IP网络编程之基于UDP的服务端/客户端

    理解UDP 在之前学习TCP的过程中,我们还了解了TCP/IP协议栈.在四层TCP/IP模型中,传输层分为TCP和UDP这两种.数据交换过程可以分为通过TCP套接字完成的TCP方式和通过UDP套接字完 ...

随机推荐

  1. 手写实现ArrayList & LinkedList

    微信公众号:程序媛的非程序人生 关注可了解更多资讯.问题或建议,请公众号留言; 1.手写实现ArrayList     2.手写实现 LinkedList       3.LinkedList的数据结 ...

  2. Python简单语音识别并响应

    起因是一个工作中喜欢说口头禅的同事,昨天老说"你看看你看看 操不操心".说了几次之后我就在他说完"你看看"后面续上,"操不操心".往复多次后 ...

  3. LeetCode 102. Binary Tree Level Order Traversal 二叉树的层次遍历 C++

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  4. loadrunner-关联

    1.什么是关联? 将服务器动态返回的值,保存成一个参数,供后面需要使用到 此参数的地方使用 PS:1.一定是服务器返回的 2.动态变化的,静态不需要关联 3.服务器需要校验的 4.保存成一个参数 5. ...

  5. Win10 安装SqlServer2012 无法访问数据库

    win10系统,安装好vs2017,sqlserver2012, 在abp     执行 Update-Database 会出错 具体解决办法是SqlServer2012的1433端口没打开. 打开办 ...

  6. POC iis短文件名

    __author__ = '*'# -*- coding:utf-8 -*- from lib.httpparse import httpparse def verify(protocol,ip,po ...

  7. 有了这个api接口工具-微信跳转其他浏览器下载app就这么简单

    现在微信渠道可以说是拉新最快的渠道,因为微信具备强裂变性.但是目前微信对第三方下载链接的拦截是越来越严格了,那么想要在微信内肆无忌惮地推广链接就需要用到微信跳转浏览器的api接口,那如何获取该api接 ...

  8. oracle数据库误删的表以及表中记录的恢复

    oracle数据库误删的表以及表中记录的恢复 一.表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的.一般步骤有: --1.从flash bac ...

  9. 每日一练之排序算法(P1097 统计数字)

    某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5×10^9).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果. ...

  10. ubuntu 外接显示器

    xrandr --help xrandr   # 列出显示器 sudo xrandr --output eDP-1 --off   # 关闭eDP-1显示器 sudo xrandr --output ...