写点什么

python 实现 ftp 服务端和客户端

作者:技能实验室
  • 2022-10-19
    河南
  • 本文字数:1394 字

    阅读完需:约 1 分钟

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

pyftpdlib

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

安装 pyftpdlib

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


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


安装 pip:


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

  • 下载 pip:

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

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

  • python3 setup.py install

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

  • 验证打开命令行窗口,输入 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 其他相关操作,可以参考官方文档;

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022-07-26 加入

还未添加个人简介

评论

发布
暂无评论
python实现ftp服务端和客户端_Python_技能实验室_InfoQ写作社区