python实现ftp服务端和客户端

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情

python中内置了一个ftp客户端,但是要实现ftp服务端还需要安装一个第三方库pyftpdlib

pyftpdlib

pyftpdlib实现了一个功能完整的异步FTP服务,开源代码地址: github.com/giampaolo/p…

安装pyftpdlib

安装方式有很多种,推荐使用pip;

pip 是 Python 的包安装程序。其实,pip 就是 Python 标准库(The Python Standard Library)中的一个包,只是这个包比较特殊,用它可以来管理 Python 标准库(The Python Standard Library)中其他的包。pip 是一个命令行程序。 安装 pip 后,会向系统添加一个 pip 命令,该命令可以从命令提示符运行。

安装pip:

  • 安装python; 这个是必须安装的;

  • 下载pip:

    官网地址:pypi.org/project/pip…; 下载完毕后,解压

  • 打开命令行窗口,进入到pip解压后的目录;执行代码

    python3 setup.py install
    进行安装, 安装完成后,将pip加入到系统环境变量中

    扫描二维码关注公众号,回复: 14491742 查看本文章
  • 验证 打开命令行窗口,输入pip list 或者pip3 list 在这里插入图片描述

以上只针对于windows系统,其他系统也可以参考;

  • 安装所需库: 打开命令行窗口,输入执行以下代码,并回车

    pip install pyftpdlib

    等待提示第三库安装成功既可;

启动FTP服务

pyftpdlib 安装成功后,在命令行输入

python3 -m pyftpdlib -p 21

即可启动一个简单的ftp服务,不够默认启动的ftp服务只有一个无密码的匿名用户,如果想添加用户和权限,需要编码实现;

编码实现一个有用户和权限认证的FTP服务端

def ftpServer():
    import pyftpdlib
    # 该脚本程序是运行在windows上的ftp
    from pyftpdlib.authorizers import DummyAuthorizer
    from pyftpdlib.handlers import FTPHandler
    from pyftpdlib.servers import FTPServer
   
    #实例化虚拟用户
    authorizer = DummyAuthorizer()
    # 添加用户权限和路径
    authorizer.add_user('user', '123456', "d:/", perm="elradfmw")
    # 添加匿名用户,只需要路径
    authorizer.add_anonymous("d:/")
    #初始化ftp句柄
    handler = FTPHandler
    handler.authorizer = authorizer
    #添加被动端口范围
    handler.passive_ports = range(2000,20033)
    # 监听ip和端口
    server = FTPServer(('0.0.0.0', 21), handler)
    # 开始服务
    server.serve_forever()
复制代码

运行以上代码,启动一个ftp服务;

ftp客户端

以上在本地启动了一个ftp服务,测试的时候,可以使用windows自有的ftp客户端连接测试;

打开命令行窗口,输入 ftp 127.0.0.1 输入用户,密码 测试结果

另外,python中也内置了ftp客户端库 ftplib

使用python中的FTP客户端

  1. 首先导入FTP

from ftplib import FTP

  1. 实例化FTP对象

ftp = FTP()

  1. 连接ftp,传入host和端口

ftp.connect(host, port)

  1. 登录到ftp,使用login方法,传入用户密码

ftp.login(u,p)

  1. 登录ftp成功,进行文件的上传和下载操作;

上传使用storbinary方法:

 buf_size = 1024
        file_handler = open(local_file, 'rb')
        ftp.storbinary('STOR %s' % remote_file, file_handler, buf_size)
        file_handler.close()
复制代码

下载使用retrbinary方法

  try:
   buf_size = 1024
   file_handler = open(local_file, 'wb')
ftp.retrbinary('RETR %s' % remote_file, file_handler.write, buf_size)
 file_handler.close()
 except Exception as err:
	 return
复制代码

执行完FTP操作后,需要关闭连接

ftp.quit()
复制代码

以上至实现了ftp的日常操作;关于ftp其他相关操作,可以参考官方文档;

猜你喜欢

转载自juejin.im/post/7132652956142272542