使用 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 服务器的更多相关文章

  1. Python的网络编程[1] -> FTP 协议[2] -> 使用 ftplib 建立 FTP 客户端

    使用 ftplib 建立 FTP 客户端 用于建立FTP Client,与 pyftplib 建立的 Server 进行通信. 快速导航 1. 模块信息 2. 建立 FTP 客户端 1. 模块信息 1 ...

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

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

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

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

  4. Python的网络编程[4] -> DHCP 协议[0] -> DHCP 的基本理论

    DHCP协议 / DHCP Protocol 目录 DHCP 基本理论 DHCP 通信流程 DHCP 完整报文 DHCP 的 Optional 字段 DHCP 的报文类型 1 DHCP 基本理论 DH ...

  5. Python的网络编程[6] -> Modbus 协议 -> Modbus 的基本理论与 Python 实现

    Modbus协议 / Modbus Protocol 目录 Modbus 协议简介 Modbus RTU协议 Modbus TCP协议与 Python 实现 Modbus 功能码 Modbus TCP ...

  6. Python的网络编程[2] -> TFTP 协议[0] -> TFTP 的基本理论

    TFTP 的基本理论 目录 通信流程 数据报文格式 传输终结 异常处理 数据丢失和超时 TFTP(Trivial File Transfer Protocol,简单文件传输协议)是UDP协议族中的一个 ...

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

    TFTP实现 / TFTP Implement 目录 TFTP 的服务器建立过程 TFTP 的客户端建立过程 1 TFTP 的服务器建立过程 服务器建立步骤主要有: (1)      设定服务器IP和 ...

  8. Python的网络编程[4] -> DHCP 协议[1] -> DHCP 的 Python 实现

    DHCP实现 / DHCP Implement 目录 DHCP 服务器建立过程 DHCP 报文加码实现过程 下面介绍建立一个简单的DHCP服务器,主要用于对基本的DHCP请求进行响应,目前只提供一个I ...

  9. python之网络编程

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

随机推荐

  1. 剑指Offer - 九度1360 - 乐透之猜数游戏

    剑指Offer - 九度1360 - 乐透之猜数游戏2014-02-05 19:54 题目描述: 六一儿童节到了,YZ买了很多丰厚的礼品,准备奖励给JOBDU里辛劳的员工.为了增添一点趣味性,他还准备 ...

  2. Windows 2003 IIS服务器配置环境(放.net开发的网站)

    配置IIS 安装.Net Framework3.5 安装SQL数据库 IIS的配置与安装步骤: 开始->管理工具->管理您的服务器->添加角色->(配置您的服务器向导)下一步- ...

  3. Velocity 语法详解

    Velocity是基于Java的模板引擎,它允许页面设计者引用Java中定义的方法.页面设计者和Java开发者能够同时使用MVC的模式开发网站,这样网页设计者能够把精力放在页面的设计上,程序员也可以把 ...

  4. NOIP2018 集训(一)

    A题 Simple 时间限制:1000ms | 空间限制:256MB 问题描述 对于给定正整数\(n,m\),我们称正整数\(c\)为好的,当且仅当存在非负整数\(x,y\)使得\(n×x+m×y=c ...

  5. 孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4

    孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十一天. 今天继续学习mongoDB的简单操作 ...

  6. HDU 4455 Substrings ( DP好题 )

    这个……真心看不出来是个DP,我在树状数组的康庄大道上欢快的奔跑了一下午……看了题解才发现错的有多离谱. 参考:http://www.cnblogs.com/kuangbin/archive/2012 ...

  7. poj2388 更水

    Who's in the Middle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 34974   Accepted: 2 ...

  8. [hdu6437]Problem L. Videos

    题目大意:有$n$个小时,有$m$个节目(每种节目都有类型$0/1$),有$k$个人,一个人连续看相同类型的节目会扣$w$快乐值. 每一种节目有都一个播放区间$[l,r]$.每个人同一时间只能看一个节 ...

  9. SPOJ 1825 Free Tour | 终极之树分治

    求树上最长路径使得经过的拥挤节点个数不超过K //欢迎访问这个博客!http://www.cnblogs.com/luyouqi233/p/8036828.html #include<cstdi ...

  10. 洛谷 P2609 [ZJOI2012]数列 解题报告

    P2609 [ZJOI2012]数列 题目描述 小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式: A(0)=0 A(1)=1 A(2i)=A(i) (对于任意 i>0 ...