使用 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()函数结束服务器。

 1 from pyftpdlib.servers import FTPServer
 2 from pyftpdlib.handlers import FTPHandler
 3 from pyftpdlib.authorizers import DummyAuthorizer
 4
 5 class FTP_Server():
 6     def __init__(self):
 7         handler = FTPHandler        # handler is a class(type is 'type')
 8         ip = '127.0.0.10'
 9         port = 21
10         address = (ip, port)
11         self.ftpServer = FTPServer(address, handler)
12         self.ftpServer.max_cons = 150           # max connection numbers
13         self.ftpServer.max_cons_per_ip = 10     # max connection ip numbers
14         print('FTP server created')
15         print(self.ftpServer)
16         # Change welcome info when client logined in
17         self.ftpServer.handler.banner = 'Welcome to my FTP server.'
18         # Passive port number should be more than max ip number, otherwise may course connection failed
19         self.ftpServer.handler.passive_ports = range(2000, 2333)
20
21         # User info bin
22         self.userInfo = {'User_1': {'user_name': 'Admin',
23                                     'password': '888888',
24                                     'home_path': '.\\FTPServerFile',
25                                     'permission': 'elradfmwM',
26                                     'msg_login': 'Admin login successful',
27                                     'msg_quit': 'Goodbye, admin.'},
28                          'User_2': {'user_name': 'Customer',
29                                     'password': '777777',
30                                     'home_path': '.\\FTPServerFile',
31                                     'permission': 'elr',
32                                     'msg_login': 'Customer login successful',
33                                     'msg_quit': 'Goodbye, customer.'}}
34
35     def addUser(self):
36         # Add users method_1
37         authorizer = DummyAuthorizer()
38         # Add new user, user name, password, home path('.' is current root path), permission level
39         for user in self.userInfo.values():
40             authorizer.add_user(user['user_name'], user['password'], user['home_path'],
41                                 perm=user['permission'], msg_login=user['msg_login'], msg_quit=user['msg_quit'])
42         self.ftpServer.handler.authorizer = authorizer
43
44         # Add users method_2
45         # Mark here: handler.authorizer also generate from DummyAuthorizer inside Handler module
46         # for user in self.userInfo.values():
47         #    self.ftpServer.handler.authorizer.add_user(user['user_name'], user['password'], user['home_path'],
48         #                        perm=user['permission'], msg_login=user['msg_login'], msg_quit=user['msg_quit'])
49
50         # Add anonymous
51         authorizer.add_anonymous('.\\FTPServerFile',
52                                  perm='elr', msg_login='anonymous login successful', msg_quit='Goodbye, anonymous.')
53
54     def run(self):
55         print('FTP server start')
56         self.ftpServer.serve_forever()
57
58     def stop(self):
59         self.ftpServer.close_all()
60
61 ftp_server = FTP_Server()
62 ftp_server.addUser()
63 ftp_server.run()

Note:

第 19 行:被动模式设置的端口数量应大于最大端口数,否则会产生报错

第 38-48 行:添加用户即可以通过 DummyAuthorizer 类生成一个新的实例进行设置,再传给 ftp 实例(42行),也可以直接通过 ftpServer.handler.authorizer 获取原本的 DummyAuthorizer 实例进行设置。

相关阅读


1. ftp 客户端

参考链接


http://www.cnblogs.com/huangxm/p/6274645.html

转载于:https://www.cnblogs.com/stacklike/p/8119879.html

Python的网络编程[1] - FTP 协议[1] - 使用 pyftplib 建立 FTP 服务器相关推荐

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

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

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

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

  3. Python之网络编程(实现一个多用户同时在线的FTP用户管理程序)

    最近虽然一直在复习C语言,但是Python的学习是没有停下的.这几天的成果就是这个实现多用户同时在线的FTP用户管理程序. 这个程序其实是比较难的,需要一个完整的框架,创建各种需要的模块和各种函数才能 ...

  4. [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  5. 0x011.Python学习-网络编程、PortScan

    Python3 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...

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

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

  7. iOS网络编程开发—HTTP协议

    iOS网络编程开发-HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

  8. 网络编程与分层协议设计:基于linux平台实现,网络编程与分层协议设计:基于Linux平台实现...

    图书简介 本书以Linux网络套接字编程和网络分层协议的设计与程序实现为主题,详细介绍如何在Linux平台下进行套接字程序设计,并给出了一个基于分层协议的应用实例,用于模拟Linux网络协议栈中IP层 ...

  9. Python之网络编程(TCP套接字与UDP套接字)

    文章目录 基于tcp的套接字 实现目标 tcp服务端源码 tcp客户端源码 tcp效果实现 基于udp的套接字 udp作用介绍 udp服务端源码 udp客户端源码 udp效果实现 用udp实现一个时间 ...

最新文章

  1. TensorFlow2020:如何使用Tensorflow.js执行计算机视觉应用程序?
  2. python3 环境变量
  3. 你的网站添加X-UA-Compatible meta标签了吗?
  4. Python 第十一章 常用第三方模块
  5. 【算法】红黑树-二叉树-算法
  6. 31Exchange Server 2010跨站点部署-搬迁Exchange服务器到分支机构
  7. 软测试综述——PV操作
  8. 10g的客户端从9i的服务器中导出数据时遇到上面的问题
  9. php中怎么函数加字符串,如何使用PHP中的字符串函数
  10. [USACO12OPEN]书架Bookshelf
  11. 系统学习机器学习之正则化(二)
  12. java B2B2C 源码 多级分销Springcloud多租户电子商城系统-SpringCloud配置中心内容加密...
  13. devc编译器中的socket编程爬坑日记
  14. oracle的成本核算,ORACLE-EBS-最新成本管理手册
  15. 机器学习-29-Pointer Network(指针网络)
  16. 连续十日票房日冠,《人生大事》带热了电影大盘!它凭何突出重围?
  17. Mysql配置文件/etc/my.cnf解析
  18. Fundamentals of Computer Graphics third/Fourth Edition
  19. 1000+医软服务商的首选,新致openhis
  20. exe crashed。

热门文章

  1. OCF 试图为物联网建立标准,但它面临着不小的挑战
  2. 存储过程C语言与PL/pgSQL实现的效率对比
  3. oracle中创建一个用户,只能查看指定的视图,如何授权,创建别名
  4. C#中的static、readonly与const的比较
  5. EIGRP负载均衡实验(如有疑问,请留言)
  6. group by 汇总
  7. 通过子网掩码留一个ip_教大家如何判断俩个IP是不是在同一个网段?什么是子网掩码?...
  8. Java 读取excl
  9. openlayers事件类型
  10. 开源贡献 计算_公司如何帮助员工为开源做出贡献