python中的一行ftp服务器

时间:2011-02-14 16:34:27

标签: python ftp ftp-server

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

10 个答案:

答案 0 :(得分:120)

强制性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.

答案 1 :(得分:76)

查看Giampaolo Rodola的pyftpdlib。它是python中最好的ftp服务器之一。它用于google的chrome(他们的浏览器)和bazaar(版本控制系统)。它是Python上RFC-959最完整的实现(又名: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)。

答案 2 :(得分:31)

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

python -m SimpleHTTPServer 8000

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

如果使用Python 3,则应编写

python3 -m http.server 8000

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

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

答案 3 :(得分:24)

上面的答案都假设你的Python发行版会有一些第三方库来实现“one liner python ftpd”目标,但这不是@zio所要求的情况。此外,SimpleHTTPServer涉及用于下载文件的web broswer,它不够快。

Python本身不能做ftpd,但你可以使用 netcat nc

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的双方将自动退出,并完成工作。

答案 4 :(得分:13)

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

sudo pip install pyftpdlib

python -m pyftpdlib -w

对于尝试使用上述弃用方法的人可能会有所帮助。

sudo python -m pyftpdlib.ftpserver

答案 5 :(得分: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/

答案 6 :(得分:2)

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

apt-get install python-pyftpdlib

现在从你想要服务的目录运行pythod模块

python -m pyftpdlib -p 21 

答案 7 :(得分:2)

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

答案 8 :(得分:0)

的好工具清单

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

我曾经多次使用过woof。很好。

答案 9 :(得分:-1)

我不知道单行FTP服务器,但如果你这样做

python -m SimpleHTTPServer

它将在0.0.0.0:8000上运行HTTP服务器,从当前目录提供文件。如果你正在寻找一种通过网络浏览器快速获取Linux文件夹的方法,你就无法击败它。