生活随笔
收集整理的這篇文章主要介紹了
python编写tftp服务器
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
tftp服務(wù)起下載文件 from socket import *import struct import osimport sysdef main():if len(sys.argv) != 3:print("請按照規(guī)則運行程序: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 = Truenum = 0while True:result = socket_udp.recvfrom(1024)tftp_data,tftp_ip_port = resultcmd_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 + 1if num == 65536: num = 0if 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("傳輸完畢.....")breakelif tftp_opcode == 5:print("沒有這個文件夾......")flag = Falshif flag == True:f.close() else:os.unlink(file_name)socket_udp.close() if __name__ == "__main__":main()
tftp服務(wù)器上傳文件 from socket import *import structimport sysimport osdef 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 = Truewhile True:result = socket_udp.recvfrom(1024)tftpd_data,tftpd_ip_port = resultop_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("傳輸完成........")breakcmd_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 = Falshbreakif flag == True:f.close()else:os.unlink(tftpd_file_name) if __name__ == "__main__":main()
總結(jié)
以上是生活随笔為你收集整理的python编写tftp服务器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。