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

     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

  • 相关阅读:
    在命令行下运行Matlab
    VMWare无法共享文件夹(Win7宿主机Ubuntu14.04客户机)
    [转] CVonline: Image Databases
    第二天
    第一天
    二宝软件的NABCD分析
    用c++实现环形数组的最大子数组之和
    返回一个二维整数数组中最大子数组的和
    求最大子数组之和
    四则运算
  • 原文地址:https://www.cnblogs.com/stacklike/p/8119879.html
Copyright © 2020-2023  润新知