标题 TFTP服务器和客户端的模拟,tftp32.exe


需要掌握的TFTP的一些知识背景,下面奉上我的python代码
"""
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2021/4/10 0:48
# @Author : allen
"""
from socket import *
import struct
filename = "chip.jpg"
server_ip = "127.0.0.1"
send_data = struct.pack("!H%dsb5sb" % len(filename), 1, filename.encode(), 0, "octet".encode(), 0)
s = socket(AF_INET, SOCK_DGRAM)
s.sendto(send_data, (server_ip, 69))
f = open(filename, "ab")
# 服务器接收数据
while True:
recv_data = s.recvfrom(1024)
# 获取操作码和数据块编号
caozuoma, ack_num = struct.unpack("!HH", recv_data[0][:4])
rand_part = recv_data[1][1] # 获取随机端口
if caozuoma == 5:
print("文件不存在......")
break
print("操作码:%d, ACK: 服务器随机端口%d, 数据长度:%d" % (caozuoma, ack_num, len(recv_data)))
f.write(recv_data[0][4:]) # 写入数据
if len(recv_data[0]) < 516:
print("文件传输完成!")
break
ack_data = struct.pack("!HH", 4, ack_num) # 确认包ack
s.sendto(ack_data, (server_ip, rand_part)) # 回复ACK确认包
187

被折叠的 条评论
为什么被折叠?



