tftp服务起下载文件 from socket import *
import struct
import os
import sys
def main():
if len(sys.argv) != 3:
print("请按照规则运行程序:python3 xxx.py ip filename")
exit()
tftp_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 = True
num = 0
while True:
result = socket_udp.recvfrom(1024)
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:
num = num + 1
if num == 65536:
num = 0
if num == tftp_serial_number:
f.write(tftp_data[4:])
cmd_buf2 = struct.pack("!HH",4,tftp_serial_number)
socket_udp.sendto(cmd_buf2,tftp_ip_port)
if len(tftp_data) < 516:
print("传输完毕.....")
break
elif tftp_opcode == 5:
print("没有这个文件夹......")
flag = Falsh
if flag == True:
f.close()
else:
os.unlink(file_name)
socket_udp.close()
if __name__ == "__main__":
main()
tftp服务器上传文件 from socket import *
import struct
import sys
import 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
flag = True
while True:
result = socket_udp.recvfrom(1024)
tftpd_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]:
send_data = f.read(512)
if len(send_data) < 512:
print("传输完成........")
break
cmd_bug = struct.pack("!HH%ds"%len(send_data),3,num,send_data)
socket_udp.sendto(cmd_bug,tftpd_ip_port)
num = num + 1
elif op_num[0] == 5:
print("没有这个文件......")
flag = Falsh
break
if flag == True:
f.close()
else:
os.unlink(tftpd_file_name)
if __name__ == "__main__":
main()