python简单实现tftp客户端(基于udp)
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)的更多相关文章
- python 之 网络编程(基于UDP协议的套接字通信)
8.5 基于UDP协议的套接字通信 UDP协议:数据报协议 特点:无连接,一发对应一收,先启动哪一端都不会报错 优点:发送效率高,但有效传输的数据量最多为500bytes 缺点:不可靠:发送数据,无需 ...
- python实现简单tftp(基于udp)
tftp是基于udp的协议 实现简单的tftp,首先要有tftp的协议图. tftp默认接收端口为69,但每次有连接过来后,tftp会随机分配一个端口来专门为这个连接来服务. 操作码:1.上传 2.下 ...
- linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)
单客户端和服务端的通信(基于UDP) 代码 服务端代码socket3.c #include<sys/types.h> #include<sys/socket.h> #inc ...
- python网络-TFTP客户端开发(25)
一. TFTP协议介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议) 是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议 特点: ...
- TFTP协议介绍-python实现tftp客户端
1. TFTP协议介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议) 是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议 特点: ...
- UNIX网络编程——分析一帧基于UDP的TFTP协议帧
下图是UDP的段格式: 相比TCP段格式,UDP要简单得多,也没啥好说的,需要注意的是UDP数据长度指payload加上首部的长度. 下面分析一帧基于UDP的TFTP协议帧: 以太网首部 0000: ...
- python 全栈开发,Day34(基于UDP协议的socket)
昨日内容回顾 网络的基础概念arp协议 :通过ip地址找到mac地址五层模型 : 应用层 传输层 网络层 数据链路层 物理层tcp协议 : 可靠的 面向连接 全双工 三次握手 四次挥手udp协议 : ...
- 分析一帧基于UDP的TFTP协议帧
下图是UDP的段格式: 相比TCP段格式,UDP要简单得多,也没啥好说的,需要注意的是UDP数据长度指payload加上首部的长度. 下面分析一帧基于UDP的TFTP协议帧: 以太网首部 0000: ...
- TCP/IP网络编程之基于UDP的服务端/客户端
理解UDP 在之前学习TCP的过程中,我们还了解了TCP/IP协议栈.在四层TCP/IP模型中,传输层分为TCP和UDP这两种.数据交换过程可以分为通过TCP套接字完成的TCP方式和通过UDP套接字完 ...
随机推荐
- myeclipse破解软件(jar包分析)
cracker.jar 第root层com 第1层crack 第二层me-->active 第4层ui 第5层find 第5层replace 第6层stream 第5层writer 第1层gen ...
- vue3.0中如何使用ueditor
1.在官网下载一个ueditor版本[https://ueditor.baidu.com/website/download.html],解压后放到public文件下的static文件中重命名为Edit ...
- include和require的区别
include与require除了在处理引入文件的方式不同外,最大的区别就是:include在引入不存文件时产生一个警告且脚本还会继续执行,require则会导致一个致命性错误且脚本停止执行. inc ...
- 在eclipse下,用Maven创建Spring MVC工程
参考链接:https://www.cnblogs.com/yangyxd/p/5955630.html 1.打开Eclipse,Ctrl + N 创建Maven
- 转发: 关于ST MCU的UID详细说明
https://www.stmcu.org.cn/article/id-327990 ST MCU芯片中的绝大部分都内置一串96位唯一标识码[unique ID].时不时有人问起这个东西,尤其最近感, ...
- python2.7 Cheetah You don't have the C version of NameMapper installed
问题:You don't have the C version of NameMapper installed sudo vi /usr/lib/python2.7/site-packages/Che ...
- 在windows 10 上使用aspnet_regiis.exe -i 命令报 “此操作系统版本不支持此选项” 的解决办法
用CMD窗口在C:\Windows\Microsoft.NET\Framework64\v4.0.30319下使用命令aspnet_regiis -i 报错: “此操作系统版本不支持此选项” .结果是 ...
- 关于Vue(旅游APP)的一些总结点
1.保持宽高比例 .wrapper{ width:100%; height:0; padding-bottom:31.25% } 2. box-sizing属性可以为三个值之一:content-box ...
- turtle画戒指
import turtleturtle.bgcolor('black')turtle.speed(5)turtle.pensize(3)for i in range(1,5): turtle.righ ...
- Golang源码探索(三) GC的实现原理(转)
Golang从1.5开始引入了三色GC, 经过多次改进, 当前的1.9版本的GC停顿时间已经可以做到极短.停顿时间的减少意味着"最大响应时间"的缩短, 这也让go更适合编写网络服务 ...