Python的网络编程[1] -> FTP 协议[1] -> 使用 pyftplib 建立 FTP 服务器
使用 pyftplib 建立 FTP 服务器
pyftplib 主要用于建立 FTP Server,与 ftplib 建立的 Client 进行通信。
快速导航
1. 模块信息
2. 建立 FTP 服务器
1 模块信息
1.1 servers模块
用于建立服务器
1.1.1 FTPServer()类
类实例化:ftpServer = FTPServer(address, handler)
类的功能: 用于建立服务器
传入参数: address, handler
address: tuple类型,包含ip地址和端口号
handler: type类型,可直接传入FTPHandler 模块
返回参数: ftpServer
1.1.1.1 serve_forever()方法
函数调用: ftpServer.serve_forever()
函数功能:用于启动服务器
传入参数: 无
返回参数: 无
1.1.1.2 close_all()方法
函数调用: ftpServer.close_all()
函数功能:用于关闭服务器
传入参数: 无
返回参数: 无
1.1.1.3 max_cons属性
属性调用: handler.max_cons = num
属性功能:用于设置最大连接数
属性参数: num
num: int类型
1.1.1.4 max_cons_per_ip属性
属性调用: handler.max_cons _per_ip = num
属性功能:用于设置最多ip数
属性参数: num
num: int类型
1.2 handlers模块
用于建立句柄
1.2.1 FTPHandler()类
handler = FTPHandler
用于建立服务器时传入FTPServer
1.2.1.1 banner属性
属性调用: handler.banner = info
属性功能:用于设置欢迎信息
属性参数: info
info: str类型,欢迎词字符串
1.2.1.2 authorizer属性
属性调用: handler.authorizer = authorizer
属性功能:用于设置许可用户信息
属性参数: authorizer
authorizer: instance类型,由DummyAuthorizer生成
1.2.1.3 passive_ports属性
属性调用: handler.passive_ports = range(from_port, to_port)
属性功能: 被动模式端口范围,该范围需大于最大ip连接数,否则可能造成连接失败
属性参数: range(from_port, to_port)
from_port: int类型,端口范围起始点
to_port: int类型,端口范围结束点,比实际最大端口大1
1.3 authorizers模块
用于授权用户等操作
1.3.1 DummyAuthorizer()类
类实例化:authorizer = DummyAuthorizer()
类的功能:用于创建权限类实例,进行用户信息授权
传入参数: 无
返回参数: authorizer
1.3.1.1 add_user()方法
函数调用: authorizer.add_user(username, password, homedir, perm=’elr’, msg_login=’Login successful.’, msg_quit=’Goodbye.’)
函数功能: 用于添加许可用户及其信息
传入参数: username, password, homedir, perm, msg_login, msg_quit
username: str类型,用户名
password: str类型,密码
homedir:str类型,路径
perm: str类型,权限
msg_login: str类型,登录信息
msg_quit: str类型,离开信息
返回参数: 无
关于权限,
读权限:e 改变文件目录,l 列出文件,r 从服务器接收文件
写权限:a 文件上传,d 删除文件,f 文件重命名,m 创建文件,w 写权限 ,M 文件传输模式(通过FTP设置文件权限 )
1.3.1.2 add_anonymous()方法
函数调用: authorizer. anonymous(homedir, perm=’elr’, msg_login=’Login successful.’, msg_quit=’Goodbye.’)
函数功能: 用于添加匿名登录许可
传入参数: homedir, perm, msg_login, msg_quit
homedir:str类型,路径
perm: str类型,权限
msg_login: str类型,登录信息
msg_quit: str类型,离开信息
返回参数: 无
2 FTP的服务器建立过程
服务器建立步骤主要有:
(1) 设定IP和端口号(常用21),生成handler
(2) 生成ftp实例,设置banner;
(3) 添加用户信息或匿名授权;
(4) serve_forever()开启服务器;
(5) close_all()函数结束服务器。
from pyftpdlib.servers import FTPServer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.authorizers import DummyAuthorizer class FTP_Server():
def __init__(self):
handler = FTPHandler # handler is a class(type is 'type')
ip = '127.0.0.10'
port = 21
address = (ip, port)
self.ftpServer = FTPServer(address, handler)
self.ftpServer.max_cons = 150 # max connection numbers
self.ftpServer.max_cons_per_ip = 10 # max connection ip numbers
print('FTP server created')
print(self.ftpServer)
# Change welcome info when client logined in
self.ftpServer.handler.banner = 'Welcome to my FTP server.'
# Passive port number should be more than max ip number, otherwise may course connection failed
self.ftpServer.handler.passive_ports = range(2000, 2333) # User info bin
self.userInfo = {'User_1': {'user_name': 'Admin',
'password': '',
'home_path': '.\\FTPServerFile',
'permission': 'elradfmwM',
'msg_login': 'Admin login successful',
'msg_quit': 'Goodbye, admin.'},
'User_2': {'user_name': 'Customer',
'password': '',
'home_path': '.\\FTPServerFile',
'permission': 'elr',
'msg_login': 'Customer login successful',
'msg_quit': 'Goodbye, customer.'}} def addUser(self):
# Add users method_1
authorizer = DummyAuthorizer()
# Add new user, user name, password, home path('.' is current root path), permission level
for user in self.userInfo.values():
authorizer.add_user(user['user_name'], user['password'], user['home_path'],
perm=user['permission'], msg_login=user['msg_login'], msg_quit=user['msg_quit'])
self.ftpServer.handler.authorizer = authorizer # Add users method_2
# Mark here: handler.authorizer also generate from DummyAuthorizer inside Handler module
# for user in self.userInfo.values():
# self.ftpServer.handler.authorizer.add_user(user['user_name'], user['password'], user['home_path'],
# perm=user['permission'], msg_login=user['msg_login'], msg_quit=user['msg_quit']) # Add anonymous
authorizer.add_anonymous('.\\FTPServerFile',
perm='elr', msg_login='anonymous login successful', msg_quit='Goodbye, anonymous.') def run(self):
print('FTP server start')
self.ftpServer.serve_forever() def stop(self):
self.ftpServer.close_all() ftp_server = FTP_Server()
ftp_server.addUser()
ftp_server.run()
Note:
第 19 行:被动模式设置的端口数量应大于最大端口数,否则会产生报错
第 38-48 行:添加用户即可以通过 DummyAuthorizer 类生成一个新的实例进行设置,再传给 ftp 实例(42行),也可以直接通过 ftpServer.handler.authorizer 获取原本的 DummyAuthorizer 实例进行设置。
相关阅读
1. ftp 客户端
参考链接
http://www.cnblogs.com/huangxm/p/6274645.html
Python的网络编程[1] -> FTP 协议[1] -> 使用 pyftplib 建立 FTP 服务器的更多相关文章
- Python的网络编程[1] -> FTP 协议[2] -> 使用 ftplib 建立 FTP 客户端
使用 ftplib 建立 FTP 客户端 用于建立FTP Client,与 pyftplib 建立的 Server 进行通信. 快速导航 1. 模块信息 2. 建立 FTP 客户端 1. 模块信息 1 ...
- Python的网络编程[3] -> BOOTP 协议[1] -> BOOTP 的 Python 实现
BOOTP实现 / BOOTP Implement 目录 BOOTP 的服务器建立过程 BOOTP 的客户端建立过程 Note: 理论部分请参考文末相关阅读链接 1 BOOTP 的服务器建立过程 服务 ...
- Python的网络编程[3] -> BOOTP 协议[0] -> BOOTP 的基本理论
BOOTP协议 / BOOTP Protocol 目录 基本理论 BOOTP 与 DHCP 通信流程 数据报文格式 报文加解码实现 1. 基本理论 / Basic Theory BOOTP(Boots ...
- Python的网络编程[4] -> DHCP 协议[0] -> DHCP 的基本理论
DHCP协议 / DHCP Protocol 目录 DHCP 基本理论 DHCP 通信流程 DHCP 完整报文 DHCP 的 Optional 字段 DHCP 的报文类型 1 DHCP 基本理论 DH ...
- Python的网络编程[6] -> Modbus 协议 -> Modbus 的基本理论与 Python 实现
Modbus协议 / Modbus Protocol 目录 Modbus 协议简介 Modbus RTU协议 Modbus TCP协议与 Python 实现 Modbus 功能码 Modbus TCP ...
- Python的网络编程[2] -> TFTP 协议[0] -> TFTP 的基本理论
TFTP 的基本理论 目录 通信流程 数据报文格式 传输终结 异常处理 数据丢失和超时 TFTP(Trivial File Transfer Protocol,简单文件传输协议)是UDP协议族中的一个 ...
- Python的网络编程[2] -> TFTP 协议[1] -> TFTP 的 Python 实现
TFTP实现 / TFTP Implement 目录 TFTP 的服务器建立过程 TFTP 的客户端建立过程 1 TFTP 的服务器建立过程 服务器建立步骤主要有: (1) 设定服务器IP和 ...
- Python的网络编程[4] -> DHCP 协议[1] -> DHCP 的 Python 实现
DHCP实现 / DHCP Implement 目录 DHCP 服务器建立过程 DHCP 报文加码实现过程 下面介绍建立一个简单的DHCP服务器,主要用于对基本的DHCP请求进行响应,目前只提供一个I ...
- python之网络编程
本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用 ...
随机推荐
- Linux下通过tcpdump抓包工具获取信息
介绍 tcpdump是网络数据包截获分析工具.支持针对网络层.协议.主机.网络或端口的过滤.并提供and.or.not等逻辑语句帮助去除无用的信息. tcpdump - dump traffic on ...
- 查看Linux系统用户登录日志
日志: /var/log/wtmp说明: 此文件是二进制文件,查看方法如下:该日志文件永久记录每个用户登录.注销及系统的启动.停机的事件.因此随着系统正常运行时间的增加,该文件的大小也会越来越大,增加 ...
- python学习总结----时间模块 and 虚拟环境(了解)
time - sleep:休眠指定的秒数(可以是小数) - time:获取时间戳 # 获取时间戳(从1970-01-01 00:00:00到此刻的秒数) t = time.time() print(t ...
- 对于进程没杀死占用内存和cpu行为的方法
在跑机器学习或者深度学习的过程中有可能遇到没杀死进程的情况,但是程序的入口又没关掉,尤其是我使用jupyter从远程Linux映射到windows浏览器跑程序的时候 对于上面的问题, 首先运行 hto ...
- 聊聊、Spring WebApplicationInitializer
说到 WebApplicationInitializer,这个接口是为了实现代码配置 Web 功能.只要实现了这个接口,那么就可以实现 Filter,Servlet,Listener 等配置,跟在 x ...
- HDU 4101 Ali and Baba (思路好题)
与其说这是个博弈,倒不如说是个搜索.这题思路不错,感觉很难把情况考虑周全. 在地图外围填充一圈0,两次BFS,第一次从-1点出发,把从-1到达的0点以及包围0的那一圈石头标记出来.如下图: 1 1 1 ...
- ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 x: 十进制到二进制的转换
http://acm.ocrosoft.com/problem.php?cid=1316&pid=49 题目描述 把十进制到二进制的转换. 输入 234 输出 11101010 样例输入 23 ...
- Ubuntu扩展系统盘容量,虚拟机下
安装gparted软件 sudo apt-get install gparted 接下来, 我们开始用Gparted软件扩展Ubuntu目录的容量: 先看操作步骤: 1. 先从windows的 ntf ...
- eclipse中git的使用
首先在Eclipse中安装EGit插件,如下图: 1. 2.点击Add 3. 4. 5. 给Eclipse安装插件很少遇到没被屏蔽的,这是一个.安装过程并不长,稍候即可. 安装成功之后我们就可以使用了 ...
- Spring Cloud配置文件加载优先级简述
Spring Cloud中配置文件的加载机制与其它的Spring Boot应用存在不一样的地方:如它引入了bootstrap.properties的配置文件,同时也支持从配置中心中加载配置文件等:本文 ...