搭建FTP服务器与客户端(1) - Python实现

  • 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地址端口号,方便后面搭建客户端。html

  • 搭建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
相关文章
相关标签/搜索