- 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()
此时,最好记录下主机的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()
也能够在浏览器地址栏输入url来访问服务器,以下:
ftp://ip:port/
其中,ip表明服务器IP地址,port为相应的端口号(如上面的9999)。
浏览器 - 参考:https://www.cnblogs.com/huangxm/p/6274645.html