BOOTP-TFTP-FTP


目录

  1. 文件传输流程
  2. 服务器建立过程
  3. 客户端建立过程

1 文件传输流程 / File Transfer Flow

利用BOOTP,TFTP,FTP三种传输协议,建立起客户端和服务器,实现一个简单的文件传输流程。

  1. Server初始化运行,开启3个线程,分别运行BOOTP,TFTP,FTP的服务器,进行监听等待;
  2. Client发起BOOTP广播,请求响应,在收到服务器响应后,根据回传的ip和文件名,启动TFTP,发起RRQ文件下载,等待文件传输完成,Client继续利用BOOTP发起广播,并根据回传信息启动TFTP(此处利用BOOTP传送的IP作为连接TFTPIP),直至BOOTP广播无响应(超时),则结束BOOTP及TFTP;
  3. 根据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 理论

2. BOOTP 的 Python 实现

3. TFTP 理论

4. TFTP 的 Python 实现

5. FTP 理论

6. FTP 服务器的 Python 实现

7. FTP 客户端的 Python 实现

Python的网络编程[5] -> BOOTP + TFTP + FTP -> 实现一个简单的文件传输流程的更多相关文章

  1. Python的网络编程[3] -> BOOTP 协议[0] -> BOOTP 的基本理论

    BOOTP协议 / BOOTP Protocol 目录 基本理论 BOOTP 与 DHCP 通信流程 数据报文格式 报文加解码实现 1. 基本理论 / Basic Theory BOOTP(Boots ...

  2. Python的网络编程[3] -> BOOTP 协议[1] -> BOOTP 的 Python 实现

    BOOTP实现 / BOOTP Implement 目录 BOOTP 的服务器建立过程 BOOTP 的客户端建立过程 Note: 理论部分请参考文末相关阅读链接 1 BOOTP 的服务器建立过程 服务 ...

  3. python之网络编程

    本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用 ...

  4. python基础网络编程--转

    python之网络编程 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的 ...

  5. python——socket网络编程

    一.OSI七层模型

  6. Python的网络编程--思维导图

    Python的网络编程--思维导图

  7. Python高级网络编程系列之第一篇

    在上一篇中我们简单的说了一下Python中网络编程的基础知识(相关API就不解释了),其中还有什么细节的知识点没有进行说明,如什么是TCP/IP协议有几种状态,什么是TCP三次握手,什么是TCP四次握 ...

  8. python 基础网络编程2

    python 基础网络编程2 前一篇讲了socketserver.py中BaseServer类, 下面介绍下TCPServer和UDPServer class TCPServer(BaseServer ...

  9. python 基础网络编程1

    python 基础网络编程1 Source code: Lib/socketserver.py lib的主目录下有一个sockserver.py文件, 里面是python基本的网络编程模型 共有一个b ...

随机推荐

  1. 剑指Offer - 九度1503 - 二叉搜索树与双向链表

    剑指Offer - 九度1503 - 二叉搜索树与双向链表2014-02-05 23:39 题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树 ...

  2. 《Cracking the Coding Interview》——第5章:位操作——题目4

    2014-03-19 06:15 题目:解释(n & (n - 1)) == 0是什么意思? 解法:n&n-1是去掉最低位‘1’的方法.根据运算符优先级,貌似用不着加那个括号,但位运算 ...

  3. SQL Server VALUES 使用一记住

    VALUES 用得最多,最常见的就是 INSER INOT 表名(列名1,列名2,......) VALUES(值1,值2,......) ------------------------------ ...

  4. Java基础-1简单了解与原理

    简单了解: Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的.因为Java没有结构,数组和串都是对象,所以不需要指 ...

  5. CandyCrush 糖果传奇

    1.unity自带触发事件 unity的每一个Collider对象都有类似OnMouseDown.OnMouseOver等事件.此事件是存在于MonoBehaviour脚本里的,而MonoBehavi ...

  6. ASP.NET Core ---异常处理

    一.局部异常处理: 在Action里面catch 二.全局异常处理: 1.默认的异常处理配置: 默认配置在StartUp文件的Configure中注册错误处理,显示开发者错误页面: public vo ...

  7. Python中关于split和splitext的差别和运用

    在使用Python的过程中,在处理字符串的时候会遇到split()和os.path.split()两个函数,他们的主要区别可以概括为一个从前往后搜索字符串,后者则是从后往前搜索 '.'(reverse ...

  8. 第二阶段团队冲刺-six

    昨天: 完成打印名单的功能. 今天: 合并程序(添加打印txt). 遇到的问题: web.xml中配置url-pattern一直不合适,不知道为什么会影响界面.

  9. 再理一下prerouting和postrouting等插入点

    这些地方的准确翻译是hook点(hook点是一个土的说法,学名叫rule chain,规则链)这些规则链是内核netfilter架构布置在内核里面的,然后iptables是利用了这套基础架构,想起了内 ...

  10. Redis String

    Redis String Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下: 语法 redis 127.0.0.1:6379> COMMAND KEY_NAME ...