BOOTP-TFTP-FTP
目录
- 文件传输流程
- 服务器建立过程
- 客户端建立过程
1 文件传输流程 / File Transfer Flow
利用BOOTP,TFTP,FTP三种传输协议,建立起客户端和服务器,实现一个简单的文件传输流程。
- Server初始化运行,开启3个线程,分别运行BOOTP,TFTP,FTP的服务器,进行监听等待;
- Client发起BOOTP广播,请求响应,在收到服务器响应后,根据回传的ip和文件名,启动TFTP,发起RRQ文件下载,等待文件传输完成,Client继续利用BOOTP发起广播,并根据回传信息启动TFTP(此处利用BOOTP传送的IP作为连接TFTP的IP),直至BOOTP广播无响应(超时),则结束BOOTP及TFTP;
- 根据TFTP下载的文件,读取其中需要下载的文件内容,利用FTP客户端发起登录,请求下载对应文件,直至FTP文件下载完成,退出FTP及客户端。
Note: 三种传输协议的实现过程可参考文末的相关阅读,部分内容如文件路径和文件名等均为硬编码,后续可做修改。
2 服务器建立过程 / Server Setup
服务器建立步骤主要有:
(1) 实例化BOOTP,TFTP,FTP三个服务器;
(2) 开启三个线程,分别运行服务器并监听等待。
from BOOTP.BOOTPServer import BOOTPServer
from TFTP.TFTPServer import TFTPServer
from FTP.FTPServer import FTP_Server class CommuniDemoServer():
def __init__(self):
self.bootp = BOOTPServer()
self.tftp = TFTPServer()
self.ftp = FTP_Server() def server_start(self):
self.bootp.start()
self.tftp.start()
self.ftp.start() server = CommuniDemoServer()
server.server_start()
3 客户端器建立过程 / Client Setup
客户端建立步骤主要有:
(1) 实例化BOOTP,TFTP,FTP三个服务器;
(2) 建立循环,开启BOOTP广播,等待报文获取ip及文件名,开启TFTP下载对应文件。完成后继续广播请求,直至广播无回应;
(3) 打开TFTP下载的文件,获取需要下载的文件名,开启FTP进行下载。下载完成后结束FTP。
from BOOTP.BOOTPClient import BOOTPClient
from TFTP.TFTPClient import TFTPClient
from FTP.FTPClient import FTP_Client class CommuniDemoClient():
def __init__(self):
self.bootp = BOOTPClient()
self.tftp = TFTPClient()
self.ftp = FTP_Client() def action(self):
while True:
recv = self.bootp.client_request()
if recv is None:
print('=== [BOOTP and FTTP] Action done')
break
self.tftp.server_ip = recv[0]
self.tftp.readRequest(recv[1])
self.ftp.download(['etsw.b3'])
file_list = []
try:
with open('TFTP\\TFTPClientFile\\copy-files4.rc') as f:
info_line = None
while info_line != '':
info_line = f.readline()
info = info_line.strip('\n').split(':')
if info != [''] and info != [' ']:
file_name = info[1]
if file_name != '' and file_name != ' ':
file_list.append(file_name.strip(' '))
except FileNotFoundError:
print('=== [FTP] Download file no found')
exit()
self.ftp.download(file_list)
print('=== [FTP] Exit') client = CommuniDemoClient()
client.action()
相关阅读
1. BOOTP 理论
3. TFTP 理论
5. FTP 理论