Python中的一行FTP服务器

问题描述 投票:94回答:9

是否有可能在python中使用一行命令来做一个简单的ftp服务器?我希望能够以这种快速且临时的方式来执行此操作,而无需将FTP服务器安装到Linux机器上。最好是使用内置的python库的方法,因此没有多余的安装。

python ftp ftp-server
9个回答
125
投票

强制Twisted示例:

twistd -n ftp

并且可能有用:

twistd ftp --help

Usage: twistd [options] ftp [options].
WARNING: This FTP server is probably INSECURE do not use it.
Options:
  -p, --port=           set the port number [default: 2121]
  -r, --root=           define the root of the ftp-site. [default:
                    /usr/local/ftp]
  --userAnonymous=  Name of the anonymous user. [default: anonymous]
  --password-file=  username:password-style credentials database
  --version         
  --help            Display this help and exit.

87
投票

从Giampaolo Rodola签出pyftpdlib。它是python最好的ftp服务器之一。它用于Google的Chrome(浏览器)和Bazaar(版本控制系统)中。它是RFC-959在Python上最完整的实现(又名:FTP服务器实现规范)。

从命令行:

python -m pyftpdlib

或者'my_server.py':

#!/usr/bin/env python

from pyftpdlib import servers
from pyftpdlib.handlers import FTPHandler
address = ("0.0.0.0", 21)  # listen on every IP on my machine on port 21
server = servers.FTPServer(address, FTPHandler)
server.serve_forever()

如果您想要更复杂的内容,可以在网站上找到更多示例。

获取命令行选项列表:

python -m pyftpdlib --help

注意,如果要覆盖或使用标准ftp端口,则需要管理员权限(例如sudo)。


37
投票

您为什么不使用单行HTTP服务器?

python -m SimpleHTTPServer 8000

将通过端口8000上的HTTP提供当前工作目录的内容。

如果使用Python 3,则应该编写

python3 -m http.server 8000

请参阅2.x的SimpleHTTPServer模块文档和3.x的http.server文档。

顺便说一下,在两种情况下,port参数都是可选的。


25
投票

上面的答案都假设您的Python发行版将具有一些第三方库,以实现“一个线性python ftpd”的目标,但是@zio并不是这样。另外,SimpleHTTPServer涉及Web浏览器来下载文件,这还不够快。

Python本身不能执行ftpd,但是您可以使用netcatnc

nc基本上是任何类似UNIX的系统(甚至是嵌入式系统)的内置工具,因此非常适合“ 传输文件的快速和临时方法”。

步骤1,在接收方,运行:

nc -l 12345 | tar -xf -

这将监听端口12345,等待数据。

发送方的第2步:

tar -cf - ALL_FILES_YOU_WANT_TO_SEND ... | nc $RECEIVER_IP 12345

您也可以将pv放在中间以监视传输进度:

tar -cf - ALL_FILES_YOU_WANT_TO_SEND ...| pv | nc $RECEIVER_IP 12345

传输完成后,nc的两面将自动退出,并完成工作。


16
投票

对于pyftpdlib用户。我在pyftpdlib网站上找到了这个。这将创建对您的文件系统具有写访问权的匿名ftp,因此请谨慎使用。更多功能可提供更好的安全性,所以请看看:

sudo pip3 install pyftpdlib

python3 -m pyftpdlib -w  

## updated for python3 Feb14:2020

对于尝试使用上述不推荐使用的方法的用户可能会有所帮助。

sudo python -m pyftpdlib.ftpserver


3
投票

安装:

pip install twisted

然后输入代码:

from twisted.protocols.ftp import FTPFactory, FTPRealm
from twisted.cred.portal import Portal
from twisted.cred.checkers import AllowAnonymousAccess, FilePasswordDB
from twisted.internet import reactor

reactor.listenTCP(21, FTPFactory(Portal(FTPRealm('./'), [AllowAnonymousAccess()])))
reactor.run()

深入了解:

http://twistedmatrix.com/documents/current/core/examples/


2
投票

更简单的解决方案将是用户pyftpd库。该库允许您将Python FTP服务器旋转到一行。虽然默认情况下未安装它,但我们可以使用简单的apt命令安装它

apt-get install python-pyftpdlib

现在从您要提供的目录中运行pythod模块

python -m pyftpdlib -p 21 

1
投票

我不知道一线FTP服务器,但是如果知道的话

python -m SimpleHTTPServer

它将在0.0.0.0:8000上运行HTTP服务器,将文件提供到当前目录之外。如果您正在寻找一种通过Web浏览器快速从Linux盒子中获取文件的方法,则无法击败它。


0
投票

很好的工具清单,在

http://www.willdonnelly.net/blog/file-transfer/

我曾多次使用woof自己。非常好。

© www.soinside.com 2019 - 2024. All rights reserved.