文档章节

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

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

当你想快速共享一个目录的时候,这是特别有用的,只需要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
粉丝 58
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
37分钟前
0
0
java大数据转换16进制转10进制

public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......

任梁荣
昨天
2
0
OSChina 周六乱弹 —— 目测我们程序员丁克的几率不大

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...

小小编辑
昨天
9
3
TypeScript基础入门 - 函数 - 剩余参数

转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
昨天
1
0
OpenCV边缘检测算子原理总结及实现

1. 拉普拉斯算子 原理:是一种基于图像导数运算的高通线性滤波器。它通过二阶导数来度量图像函数的曲率。 拉普拉斯算子是最简单的各向同性微分算子,它具有旋转不变性。一个二维图像函数的拉...

漫步当下
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部