文档章节

手把手教你用1行Python代码实现FTP服务器 -- Pyftpdlib

kangvcar
 kangvcar
发布于 2017/12/30 20:38
字数 621
阅读 4503
收藏 95

当你想快速共享一个目录的时候,这是特别有用的,只需要1行代码即可实现。

FTP 服务器,在此之前我都是使用Linux的vsftpd软件包来搭建FTP服务器的,现在发现了利用pyftpdlib可以更加简单的方法即可实现FTP服务器的功能。

环境要求

  • Python 2.7
  • Windows / Linux

环境搭建

pip install pyftpdlib

一行代码实现FTP服务器

通过Python的-m选项作为一个简单的独立服务器来运行,当你想快速共享一个目录的时候,这是特别有用的。

在需要共享的目录下执行如下命令即可把当前目录共享出去(匿名登录)

python -m pyftpdlib

至此一个简单的FTP服务器已经搭建完成,访问 ftp://127.0.0.1:2121 即可

(默认IP为 127.0.0.1 、端口为 2121

效果图

可选参数

  • -i 指定IP地址(默认为本机的IP地址)
  • -p 指定端口(默认为2121
  • -w 写权限(默认为只读)
  • -d 指定目录 (默认为当前目录)
  • -u 指定用户名登录
  • -P 设置登录密码

简单示例

上述的一行命令已经可以实现一个简单的FTP服务器,但是要搭建一个功能强大完善的FTP服务所涉及到的配置较多,这时需要使用Pyftpdlib提供的 API 来编写。如下是一个简单的示例

from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer

# 实例化DummyAuthorizer来创建ftp用户
authorizer = DummyAuthorizer()
# 参数:用户名,密码,目录,权限
authorizer.add_user('user', '12345', '/opt/pyftp/test', perm='elradfmwMT')
# 匿名登录
# authorizer.add_anonymous('/home/nobody')

handler = FTPHandler
handler.authorizer = authorizer

# 参数:IP,端口,handler
server = FTPServer(('192.168.56.100', 21), handler)
server.serve_forever()

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命令)

参考

Pyftpdlib文档:http://pyftpdlib.readthedocs.io/en/latest/index.html

© 著作权归作者所有

共有 人打赏支持
kangvcar
粉丝 59
博文 67
码字总数 74741
作品 0
广州
运维
加载中

评论(12)

junfeng777
junfeng777
请教下 这个只能局域网内吗?为什么我路由对外转发端口 外部访问不了?
纳兰清风
纳兰清风
我们都是用nc传文件。。。。
loubobooo
loubobooo
报了 /usr/bin/python: pyftpdlib is a package and cannot be directly execute ??
_hadooper
_hadooper
1
kangvcar
kangvcar

引用来自“lsf0”的评论

可以传输含中文的文件吗?
Why not?
理工小强
理工小强
还是curl吧
l
lsf0
可以传输含中文的文件吗?
hsl727261250
hsl727261250
python -m http.server 80
kangvcar
kangvcar

引用来自“wei2011”的评论

不错,有用
感谢您的肯定
kangvcar
kangvcar

引用来自“开源中国首席打酱油啊哎滴”的评论

py2: SimpleHTTPServer
py3: http.server
也可以实现简单的共享目录
嘿嘿。还请多多指点迷津
FTP Server by python (pyftpdlib)

0 .背景 最近,需要做一个保存网络摄像机上传的图片,并进行处理的程序,摄像机是通过移动侦测和遮挡侦测发送图片到ftp服务器上. 为了实现上述目标,考虑编写一套ftp server的代码,这样不仅可以保...

gaoshine
01/12
0
0
linux 学习笔记 (3) —— 使用python

1.安装python 2.6 ----------参考 http://www.cnblogs.com/end/archive/2012/10/24/2736841.html 安装好后,直接yum list python26,如果出现这个包,说明正常了。yum这个工具的等待时间很长...

TdadaT
2012/10/30
0
0
一句python代码搭建FTP服务

环境搭建: python windows/linux pip install pyftpdlib (安装失败请到这里下载:https://pypi.python.org/pypi/pyftpdlib/) 一行代码搞定的事: 到你打算分享的目录下执行,python -m pyf...

_周小董
05/01
0
0
微信消息撤回有何用?现在有Python大佬手把手教你如何查看!

导读: Python曾经对我说:"时日不多,赶紧用Python"。于是看到了一个基于python的微信开源库:itchat,玩了一天,做了一个程序,把私聊撤回的信息可以收集起来并发送到个人微信的文件传输助...

Python新世界
07/27
0
0
python实现FTP服务器

FTP服务的主动模式和被动模式 在开始之前,先聊一下FTP的主动模式和被动模式,两者的区别 , 用两张图来表示可能会更加清晰一些: 主动模式: 主动模式工作过程: 1. 客户端以随机非特权端口...

baby神啊
2017/10/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
30分钟前
1
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
45分钟前
4
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
3
0
Redis性能问题排查解决手册

一、性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 nfo命令输出的数据可...

IT--小哥
昨天
1
0
mixin混入

①新建mixin.js文件 const mixin = { methods: { /** * 分页公共方法 */ handleSizeChange(val) { this.pageData.size = val; this.query(); }, hand......

不负好时光
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部