利用python内置下载器-快速分享文件

一、任务场景:

工作中需要将服务器上的某些文件传给对应的同事,如果临时去搭建文件服务器或者配置,操作起来不太方便

二、比如临时需要分享/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

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注