2021-04-10

标题 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确认包
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值