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. BigDecimal简单说

    1) 浮点数的舍弃规则: 假设小数点后保留两位 RoundingMode.CEILING:向正无穷大的方向舍入:  1.245 → 1.25   -1.245 → -1.24 RoundingMode ...

  2. day06_08 字符串

    1.0 双引号和单引号的区别 a = "Let's go" print(a) #>>>Let's go 2.0 重复输出字符串* print('hello'*2) ...

  3. 平衡二叉树(AVL)

    AVL就是优化二叉查找树 平衡因子不大于1 左 < 根 < 右 具体看代码 #include<bits/stdc++.h> using namespace std; typed ...

  4. Elasticsearch同义词词汇单元过滤器

    1 简单扩展 "jump,hop,leap" 搜索jump会检索出包含jump.hop或leap的词 1.1 扩展应用在索引阶段 1.2 扩展应用在查询阶段 1.3 对比 2 简单 ...

  5. wireshark简单使用

    过滤表达式的规则   表达式规则   1. 协议过滤   比如TCP,只显示TCP协议. ip.src == 219.216.87.200 and ip.dst==219.216.87.254   2 ...

  6. python中的re模块,常用函数介绍

    参考: http://www.cnblogs.com/tina-python/p/5508402.htm ======== 1,预定义字符集,可以写在字符集[....]中 \d  数字: \D 非数字 ...

  7. Android Canvas类介绍

    当我们调整好画笔之后,现在需要绘制到画布上,这就得用Canvas类了.在Android中既然把Canvas当做画布,那么就可以在画布上绘制我们想要的任何东西.除了在画布上绘制之外,还需要设置一些关于画 ...

  8. update-database -script

    update-database -script 更新脚本生成失败? 项目选择的不对 update后面-database空格-script

  9. Linux下nginx支持.htaccess文件实现伪静态的方法!

    在Google上搜索的资料很多人都说nginx目前不支持.htaccess文件,我按照nginx的规则试验了一下,结果发现nginx是完全支持.htaccess文件的! 方法如下: 1. 在需要使用. ...

  10. 【bzoj1976】[BeiJing2010组队]能量魔方 Cube 网络流最小割

    题目描述 一个n*n*n的立方体,每个位置为0或1.有些位置已经确定,还有一些需要待填入.问最后可以得到的 相邻且填入的数不同的点对 的数目最大. 输入 第一行包含一个数N,表示魔方的大小. 接下来 ...