搭建FTP服务器与客户端(1)

  • FTP背景介绍
    FTP(File Transfer Protocol)协议,顾名思义为文件传输协议。由已故的Jon Postel与Joyce Reynolds开发,并于1985年10月发布。其底层基于TCP/IP协议。FTP目前主要用于匿名下载公共文件,也可以在两台跨系统的计算机之间传输文件。
    为了实现FTP协议,很显然需要同时构建FTP服务器与客户端。而服务器与客户端均通过两个套接字(分别绑定在“命令端口”与“数据端口”)进行双向通信。对于数据端口,从服务器的角度来看有两种绑定模式,分别为“主动模式”与“被动模式”。主动模式下,服务器的数据端口主动连接客户端的数据端口;被动模式下,服务器告知客户端数据端口号,再由客户端主动发起连接。
    本篇内容将对FTP服务器与客户端进行简单的构建,仅供参考!注意,搭建服务器需要用到第三方库pyftpdlib(没有的话,则在终端输入"pip install pyftpdlib"进行安装),搭建客户端需要用到标准库ftplib
  • 搭建FTP服务器
     1 # 搭建FTP服务器
     2 
     3 from pyftpdlib.authorizers import DummyAuthorizer
     4 from pyftpdlib.handlers import FTPHandler
     5 from pyftpdlib.servers import FTPServer
     6 
     7 import socket                        # 主要用于获取当前主机IP地址
     8 
     9 # 1. 添加授权用户
    10 authorizer = DummyAuthorizer()
    11 # 添加非匿名用户, 各项分别代表: 用户名, 密码, 用户根目录, 用户权限
    12 authorizer.add_user('xxx', '12345', './', 'elradfmwM')
    13 authorizer.add_user('yyy', '12345', '../', 'elradfmwM')
    14 # 添加匿名用户, 各项分别代表: 匿名用户根目录
    15 authorizer.add_anonymous('./')
    16 
    17 # 2. 更改FTP处理器的授权用户属性(归属于"类属性")
    18 handler = FTPHandler
    19 handler.authorizer = authorizer
    20 
    21 # 3. 通过主机名与端口号实例化FTP服务器, 并启动
    22 server = FTPServer((socket.gethostbyname(socket.gethostname()), 9999), handler)
    23 server.serve_forever()
    View Code

 此时,最好记录下主机的IP地址端口号,方便后面搭建客户端。

  • 搭建FTP客户端
     1 # 搭建FTP客户端
     2 
     3 from ftplib import FTP
     4 
     5 import socket                # 主要用于获取当前主机IP地址
     6 
     7 # 1. 实例化FTP对象, 并连接
     8 ftp = FTP()
     9 ftp.connect(socket.gethostbyname(socket.gethostname()), 9999)   # 应该输入服务器IP地址. 由于此处客户端与服务器建立在同一台主机上, 因此采用socket方法替代
    10 
    11 # 2. 登录
    12 ftp.login("xxx", "12345")
    13 # 匿名登录方法, 注意: 匿名用户的权限较低
    14 # ftp.login("anonymous")
    15 
    16 # 3. 交互
    17 # 查看当前工作目录, 及指定目录下的内容
    18 # print(ftp.pwd(), ftp.dir('./'))
    19 # 下载文件
    20 ftp.retrbinary("RETR aaa.jpg", open("aaa.jpg", 'wb').write)
    21 # 上传文件
    22 ftp.storbinary("STOR scheme.txt", open("scheme.txt", 'rb'))
    23 
    24 # 4. 退出
    25 ftp.quit()
    View Code

也可以在浏览器地址栏输入url来访问服务器,如下:
ftp://ip:port/
其中,ip代表服务器IP地址,port为相应的端口号(如上面的9999)。

  • 参考
    https://www.cnblogs.com/huangxm/p/6274645.html