一、任务场景:
工作中需要将服务器上的某些文件传给对应的同事,如果临时去搭建文件服务器或者配置,操作起来不太方便
二、比如临时需要分享/tools这个目录的文件,操作方法如下:
2.1、采用http的方式进行分享
python -m http.server
C:\>python -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
127.0.0.1 - - [18/Dec/2019 23:45:20] "GET /Users/xww20/Downloads/ HTTP/1.1" 200 -
127.0.0.1 - - [18/Dec/2019 23:45:25] code 404, message File not found
127.0.0.1 - - [18/Dec/2019 23:45:25] "GET /favicon.ico HTTP/1.1" 404 -
a)说明
默认情况下会占用系统中的8000端口,可以指定对应的端口(比如80),比如python -m http.server 80
d)浏览器验证
我们可以在浏览器中输入http://localhost:端口 ,下载对应的文件
2.2、采用ftp的方式进行分享
a)操作方法
Python没有内置一个直接可以用的FTP服务器,所以需要第三方组件的支持,我找到的这个组件叫pyftpdlib,首先安装:
pip install pyftpdlib
安装完后,和HTTP服器类似,执行以下命令就可以启动一个FTP服务器了:
python -m pyftpdlib -p 21
后面的21端口依然是可选的,不填会随机一个,被占用的端口将跳过。
b)验证
在浏览器敲入本机地址:ftp://localhost
这时候,是匿名访问,也就是用户名是anonymous,密码为空,如果想要控制访问权限,你需要自己定制服务器
三、定制ftp server
3.1、ftp服务器代码1:
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
def main():
# Instantiate a dummy authorizer for managing 'virtual' users
authorizer = DummyAuthorizer()
# Define a new user having full r/w permissions and a read-only
# anonymous user
authorizer.add_user('user', '12345', '.', perm='elradfmwM')
authorizer.add_anonymous(os.getcwd())
# Instantiate FTP handler class
handler = FTPHandler
handler.authorizer = authorizer
# Define a customized banner (string returned when client connects)
handler.banner = "pyftpdlib based ftpd ready."
# Specify a masquerade address and the range of ports to use for
# passive connections. Decomment in case you're behind a NAT.
#handler.masquerade_address = '151.25.42.11'
#handler.passive_ports = range(60000, 65535)
# Instantiate FTP server class and listen on 0.0.0.0:2121
address = ('', 2121)
server = FTPServer(address, handler)
# set a limit for connections
server.max_cons = 256
server.max_cons_per_ip = 5
# start ftp server
server.serve_forever()
if __name__ == '__main__':
main()
3.2、ftp服务器代码2:
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
import socket
# 自动获得本机ip地址
ip = socket.gethostbyname(socket.gethostname())
authorizer = DummyAuthorizer()
## 添加 用户名/密码/ftp目录。当目录用"."表示.py文件当前所在的目录
authorizer.add_user("Admin", "admin@123", "c:\\", perm="elradfmwM")
## 添加匿名访问时的 ftp目录
authorizer.add_anonymous("c:\\", perm="elradfmwM")
handler = FTPHandler
handler.authorizer = authorizer
## 设置ftp的本地或者ip地址/端口,可以根据自己的实际情况修改ip和端口即可。
# server = FTPServer(("0.0.0.0", 21), handler)
# server = FTPServer(("127.0.0.1", 21), handler)
server = FTPServer(("0.0.0.0", 21), handler)
server.serve_forever()
3.3、perm权限选项
读取权限:
"e" =更改目录(CWD,CDUP命令)
"l" =列表文件(LIST,NLST,STAT,MLSD,MLST,SIZE命令)
"r" =从服务器检索文件(RETR命令)
写入权限:
"a" =将数据追加到现有文件(APPE命令)
"d" =删除文件或目录(DELE,RMD命令)
"f" =重命名文件或目录(RNFR,RNTO命令)
"m" =创建目录(MKD命令)
"w" =将文件存储到服务器(STOR,STOU命令)
"M"=更改文件模式/权限(SITE CHMOD命令)
"T"=更改文件修改时间(SITE MFMT命令)
3.4、参考
Pyftpdlib文档:http://pyftpdlib.readthedocs.io/en/latest/index.html
文章评论