Python 创建FTP服务器

安装pyftpdlib

pip install pyftpdlib

修改编码字符集,解决中文文件名乱码

>>> import pyftpdlib
>>> pyftpdlib.__path__
['/iron/python_env/lib/python3.6/site-packages/pyftpdlib']

# vim /iron/python_env/lib/python3.6/site-packages/pyftpdlib/filesystems.py
#             #yield line.encode('utf8', self.cmd_channel.unicode_errors)
#             yield line.encode('gbk', self.cmd_channel.unicode_errors)

服务器程序: ftpserver.py

from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler,ThrottledDTPHandler
from pyftpdlib.servers import FTPServer
from pyftpdlib.log import LogFormatter
import logging


# 记录日志,默认情况下日志仅输出到屏幕(终端),这里既输出到屏幕又输出到文件,方便日志查看
logger = logging.getLogger()
logger.setLevel(logging.INFO)
ch = logging.StreamHandler()
fh = logging.FileHandler(filename='myftpserver.log', encoding='utf-8') # 默认的方式是追加到文件
ch.setFormatter(LogFormatter())
fh.setFormatter(LogFormatter())
logger.addHandler(ch) # 将日志输出到屏幕
logger.addHandler(fh) # 将日志输出到文件


# 实例化虚拟用户,这是FTP验证的首要条件
authorizer = DummyAuthorizer()
# 添加用户权限和路径,括号内的参数是(用户名,密码,用户目录,权限),可以为不同的用户添加不同的目录和权限
authorizer.add_user('admin', 'admin@23~', "/opt/2019/", perm='elradfmw')
# 添加匿名用户,只需要路径
authorizer.add_anonymous("/tftpboot/")

# 初始化ftp句柄
handler = FTPHandler
handler.authorizer = authorizer

# 添加被动端口范围
handler.passive_ports = range(2000, 2333)

# 下载上传速度设置
dtp_handler = ThrottledDTPHandler
dtp_handler.read_limit = 10 * 1024**2 # 10MB/s
dtp_handler.write_limit = 10 * 1024**2 # 10MB/s
handler.dtp_handler = dtp_handler

# 监听IP和端口,Linux里需要root用户处理使用21端口
server = FTPServer(("0.0.0.0", 21), handler)

# 最大连接数
server.max_cons = 150
server.max_cons_per_ip = 15

# 开始服务,自带日志打印信息
server.serve_forever()

启动FTP服务器

python ftpserver.py 
[I 2020-01-02 23:28:50] >>> starting FTP server on 0.0.0.0:21, pid=15345 <<<
[I 2020-01-02 23:28:50] concurrency model: async
[I 2020-01-02 23:28:50] masquerade (NAT) address: None
[I 2020-01-02 23:28:50] passive ports: 2000->2332
点赞

发表评论

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