1. tftp服务起下载文件

      from socket import *import struct import osimport sysdef main():if len(sys.argv) != 3:print("请按照规则运行程序:python3 xxx.py ip filename")exit()#服务器iptftp_ip = sys.argv[1]#文件名字file_name = sys.argv[2]#名字大小file_num = len(file_name)#下载请求cmd_buf = struct.pack("!H%dsb5sb"%file_num,1,file_name.encode("utf-8"),0,"octet".encode("utf-8"),0)#创建套接字socket_udp = socket(AF_INET,SOCK_DGRAM)#给服务器发送我需要的东西socket_udp.sendto(cmd_buf,(tftp_ip,69))#打开一个文件f = open(file_name,"bw")flag = Truenum = 0while True:result = socket_udp.recvfrom(1024)#数据     新ip端口tftp_data,tftp_ip_port = result#操作号cmd_tuple = struct.unpack("!H",tftp_data[:2])#块编号cmd_tuple2 = struct.unpack("!H",tftp_data[2:4])    #操作码tftp_opcode = cmd_tuple[0]#块编号tftp_serial_number = cmd_tuple2[0]#打印当前快编号print(tftp_serial_number)if tftp_opcode == 3: #是否为数据#计算出这次应该接收到的文件的序号值,应该是上一次接收到的值的基础上+1num = num + 1# 如果一个下载的文件特别大,即接收到的数据包编号超过了2个字节的大小# 那么会从0继续开始,所以这里需要判断,如果超过了65535 那么就改为0if num == 65536: num = 0if num == tftp_serial_number: # 用块编号测试是否有重复数据f.write(tftp_data[4:])#测试Ackcmd_buf2 = struct.pack("!HH",4,tftp_serial_number)#把当前接收到的 快编号发送个服务器 随机端口和ipsocket_udp.sendto(cmd_buf2,tftp_ip_port)#测试数据长度if len(tftp_data) < 516:print("传输完毕.....")breakelif tftp_opcode == 5:print("没有这个文件夹......")flag = Falshif flag == True:f.close() #关闭文件else:os.unlink(file_name)#没有这个文件 把创建的文件删除socket_udp.close() #关闭套接字if __name__ == "__main__":main()
    
  2. tftp服务器上传文件
       from socket import *import structimport sysimport os#上传的主要核心你要知道你是发送方#服务器是接收方  服务器反回确认信息,或者报错信息def main():if len(sys.argv) != 3:print("python3 xxx.py ip filename")exit()tftpd_ip = sys.argv[1]tftpd_file_name = sys.argv[2]#打包cmd_buf = struct.pack("!H%dsb5sb"%len(tftpd_file_name),2,tftpd_file_name.encode("utf-8"),0,"octet".encode("utf-8"),0)socket_udp = socket(AF_INET,SOCK_DGRAM)socket_udp.sendto(cmd_buf,(tftpd_ip,69))f = open(tftpd_file_name,"br")num = 1  #这里写1是因为  我上面发送了一次的flag = Truewhile True:result = socket_udp.recvfrom(1024)#服务起反回的确认信息 和 ip porttftpd_data,tftpd_ip_port = result#操作号 服务的确认的操作好op_num = struct.unpack("!H",tftpd_data[:2])#块编号 服务起反回的快编号pack_num = struct.unpack("!H",tftpd_data[2:4])print(pack_num[0])if op_num[0] == 4:if num-1 == pack_num[0]:  # 这里写num-1  是因为 pack_num[0] 是反回的我上次发的快编号send_data = f.read(512)if len(send_data) < 512:print("传输完成........")break#num是快编号 因为我是发送方 我要自做个快比那好cmd_bug = struct.pack("!HH%ds"%len(send_data),3,num,send_data) #send_data是读取的文件信息socket_udp.sendto(cmd_bug,tftpd_ip_port) #发给服务器num = num + 1 #我的快编号加1elif op_num[0] == 5:print("没有这个文件......")flag = Falshbreakif flag == True:f.close()else:os.unlink(tftpd_file_name) #删除这个文件if __name__ == "__main__":main()
    

python编写tftp服务器相关推荐

  1. 利用python编写设计多线程web服务器(计算机网络_自顶向下第六版_第二章1和4的编程作业)

    今天翻看自己以前的博客时,发现了这则博客,距今大约也有一年多的时间了,觉得还是蛮有趣的一个作业,于是跟着博客又做了一遍,觉得之前的排版有点不大好,所以此番用markdown 稍微重做些修改更新一下博客 ...

  2. 使用python编写mqtt客户端向EMQX服务器发送数据

    摘要:本文介绍如何用python编写一个mqtt客户端向EMQX服务器发送数据,实现一个简易的本地物联网服务器. 上一篇文章讲到使用mqtt.fx软件来发布消息. (1条消息) 使用mqtt.fx向E ...

  3. [转载] Python中TFTP的理解

    参考链接: Python中的打包pack和拆包unpack参数 Num01–>TFTP协议介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议) 是TC ...

  4. python编写脚本方法_【Python】教你一步步编写banner获取脚本

    Hello 各位小伙伴们大家好,周末过的愉快吗? 刚好最近学习了使用python编写banner获取脚本,今天就跟大家一起一步一步再学习一遍吧. Part.1 说明篇 什么是banner? banne ...

  5. python爬取百度贴吧中的所有邮箱_使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号...

    原标题:使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号 不知道大家过年都是怎么过的,反正栏主是在家睡了一天,醒来的时候登QQ发现有人找我要一份贴吧爬虫的源代码,想起之前练手的时候写过一个抓 ...

  6. python软件怎么用-如何使用Python编写一个桌面软件系统?步骤有哪些

    建议直接用python编写一个网页服务器,然后就在本机用浏览器来使用. 简单介绍一下这样做的好处: [1]python的桌面GUI模块都不太好用,比如pyQT需要额外安装很大的QT,tkinter则相 ...

  7. 思维导图 - 测试技术扩展:Postman接口测试、Sonar白盒测试、Sonic移动测试、Python操作FTP服务器

    给大家整理了下测试技术扩展相关的学习文档. 第一章: Postman 接口测试工具 测试工具 - Postman 接口测试入门使用手册,Postman 如何进行数据关联.自动更新 cookies.简单 ...

  8. tftp服务器_Transfer for Mac(TFTP服务器)

    小编给大家带来了一个超棒的TFTP服务器程序.Transfer Mac版适用于Mac的简单可靠的TFTP服务器.Transfer for Mac是一种可靠且完全符合RFC的TFTP服务器应用程序.Ma ...

  9. python版本的服务器

    http://sebug.net/paper/books/tornado/#overview FriendFeed使用了一款使用 Python 编写的,相对简单的 非阻塞式 Web 服务器.其应用程序 ...

  10. Python编写简易木马程序

    0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马.依然选用Sublime text2 +JEDI(python自动补全 ...

最新文章

  1. Pandownload 下线了,我花了 30 分钟自己搭建了一个网盘
  2. Spring Boot构建多租户SaaS平台核心技术指南
  3. 创建一个dynamics 365 CRM online plugin (一) - Hello World Plugin
  4. android butterknife使用详解
  5. :nth-child和:nth-of-type之间的差异
  6. Eigen教程(10)之混淆
  7. P3935 Calculating
  8. Java 反射Reflection总结二
  9. 自动语音呼叫中心系统
  10. 服务器lsass占用内存_Lsass.exe进程占用大量内存
  11. python数字字母识别_字符图像识别——数字字母混合
  12. Linux DMA 内dwc_prep_slave_sg函数与device_prep_dma_cyclic函数
  13. 磨刀不误砍柴工(四)-IDEA常用快捷键
  14. 计算机监控系统在地铁中的应用有哪些,地铁综合监控
  15. PTA-L2-016 愿天下有情人都是失散多年的兄妹 (25分)
  16. OpenJudge百炼-2965-玛雅历-C语言-日期处理
  17. linux下部署项目,下载文件时,中文文件名乱码问题
  18. Pandas数据分析14——pandas数据框的多层索引
  19. 如何修改win7上的mac地址
  20. 干货 | 三维点云配准:ICP 算法原理及推导

热门文章

  1. 现代控制理论(一)控制系统的状态空间描述
  2. 32位win10服务器系统,32位win10原版
  3. pr视频两边模糊_pr教程:如何制作视频画面局部模糊效果?-吾尊时尚
  4. 如何复制百度文库、豆丁网上的文本
  5. FlexPaper — 可以用来仿豆丁网、百度文库的PDF在线阅读功能
  6. {电脑救助站}常用知识2
  7. 人工合成生命的最新进展比AI还快
  8. jsp java session_JSP Session
  9. COSMOS/DesignSTAR.v4.5 1CD
  10. vsftpd配置详解