Python 中的一行 ftp 服务器

有没有可能在 python 中使用一行命令来完成一个简单的 ftp 服务器?我希望能够以快速和临时的方式将文件传输到 Linux 机器,而不必安装 ftp 服务器。最好是一种使用内置的 python 库的方法,这样就没有额外的安装了。

184649 次浏览

我不知道一行 FTP 服务器,但如果你知道

python -m SimpleHTTPServer

它将在0.0.0.0:8000上运行一个 HTTP 服务器,从工作目录中提供文件服务。如果您正在寻找一种方法,以快速获取文件的 linux 框与网络浏览器,你不能击败它。

为什么不使用一行 HTTP服务器呢?

python -m SimpleHTTPServer 8000

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

如果使用 Python3,则应改为编写

python3 -m http.server 8000

有关2.x,请参阅 SimpleHTTPServer模块 docs,有关3.x,请参阅 http.server docs。

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

必须的 扭曲例子:

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.

看看詹保罗 · 罗多拉的 Pyftpdlib。它是 Python 最好的 ftp 服务器之一。它被用于谷歌的 chrome (浏览器)和 bazaar (版本控制系统)。它是 Python for RFC-959(又名: FTP 服务器实现规范)上最完整的实现。

安装:

pip3 install pyftpdlib

来自指挥部的消息:

python3 -m pyftpdlib

或者“ my _ server.py”:

#!/usr/bin/env python3


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()

如果你想要更复杂的东西,网站上有更多的例子。

要获取命令行选项列表:

python3 -m pyftpdlib --help

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

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

sudo pip3 install pyftpdlib


python3 -m pyftpdlib -w


## updated for python3 Feb14:2020

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

Sudo python-m pyftpdlib.ftpserver

上面的答案都假设您的 Python 发行版将拥有一些第三方库,以实现“ one liner Python ftpd”目标,但@zio 所要求的情况并非如此。此外,SimpleHTTPServer 还包含下载文件的 web 浏览器,速度不够快。

Python 不能自己完成 ftpd,但是你可以使用 Netcatnc:

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

第一步,在接收端,运行:

nc -l 12345 | tar -xf -

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

第二步,发送方:

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两侧自动退出,工作完成。

安装:

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/

更简单的解决方案是用户 pyftpd 库。这个库允许您在一行中旋转 PythonFTP 服务器。默认情况下它不会安装,但是我们可以使用简单的 apt 命令安装它

apt-get install python-pyftpdlib

现在从您要服务的目录中运行 pythod 模块

python -m pyftpdlib -p 21
apt-get install python3-pip


pip3 install pyftpdlib


python3 -m pyftpdlib -p 21 -w --user=username --password=password


-w = write permission


-p = desired port


--user = give your username


--password = give your password