文档章节

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

kangvcar
 kangvcar
发布于 2017/12/30 20:38
字数 621
阅读 5221
收藏 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
粉丝 61
博文 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
2018/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...

_周小董
2018/05/01
0
0
python实现FTP服务器

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

baby神啊
2017/10/29
0
0
高性能Ftp服务器--FeiTP-server

1.Very high-preformance FTP Server about 10X than vsFTP server 2.Base on pyhton lib (pyftpdlib) 3.Use Multi-CPU Tech on python lib(multiprocess) 4.stable and expand your own log......

吴小飞
2011/11/10
3.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

维信小程序button样式重写

一、小程序button默认按钮样式重写 以primary按钮为例: /**重写默认按钮样式**/button[type='primary'] {background: red;padding: 5px 0px;line-height: 30px;font-size: 14px;......

tianma3798
35分钟前
1
0
使用async和await封装vue中的http请求

实际需求中经常会碰到想异步请求代码写的像同步一样简洁,解决回调地狱,这是最近封装的一个。 // import qs from 'qs';import axios from 'axios'import utils from './util'import { To......

chinahufei
42分钟前
1
1
python中类方法和静态方法区别

面相对象程序设计中,类方法和静态方法是经常用到的两个术语。 逻辑上讲:类方法是只能由类名调用;静态方法可以由类名或对象名进行调用。 在C++中,静态方法与类方法逻辑上是等价的,只有一...

Linux就该这么学
48分钟前
2
0
5G是现实的狂欢还是骨感?

“4G改变生活,5G改变社会。” 这一句充满无限遐想的口号,因2019年世界移动大会(MWC2019)召开带来的产业最前沿动态,让观察者、消费者产生梦想照进现实的感觉。OPPO、小米、华为、三星、LG、...

linuxCool
51分钟前
2
0
Codis的dashboard异常退出后,重新启动报异常的处理方法

dashboard是codis的核心组建,所有集群相关的操作都是通过dashboard进行的。如果dashboard出现宕机、服务被杀掉等极端情况,则会导致codis集群无法使用。 1)codis集群维护时,需要关闭dashb...

linxyz
52分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部