tftp下载器

import struct
from socket import *

default = True
filename = 'functions'
send_data = struct.pack('!H9sb5sb', 1, filename.encode(), 0, 'octet'.encode(), 0)
udp_socket = socket(AF_INET, SOCK_DGRAM)
host_port = ('192.168.2.30', 69)
udp_socket.sendto(send_data, host_port)
p_num = 0
recvFile = ''
while True:
    recv_data, recv_addr = udp_socket.recvfrom(1024)
    recv_data_len = len(recv_data)
    file_data = recv_data.decode()[4:]
    opcode, block_code = struct.unpack('!HH', recv_data[:4])
    print('opcode: {} block_code: {} len: {}'.format(opcode, block_code, recv_data_len))
    if int(opcode) == 3:
        if block_code == 1:
            recvFile = open(filename, "a")
        if p_num + 1 == block_code:
            recvFile.write(file_data)
            p_num += 1
            print('Receive data from tftp server, block code: {}'.format(block_code))
            ack_data = struct.pack('!HH', 4, p_num)
            udp_socket.sendto(ack_data, recv_addr)
        if recv_data_len < 516:
            recvFile.close()
            print('Done.')
            break
    elif opcode == 5:
        print('Error, opcode: {} block code: {}'.format(opcode, block_code))
udp_socket.close()

results matching ""

    No results matching ""