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()