是否可以在 python 中使用一行命令来做一个简单的 ftp 服务器?我希望能够以快速和临时的方式将文件传输到 linux 机器,而无需安装 ftp 服务器。最好是使用内置 python 库的方法,因此无需安装任何额外的东西。
9 回答
强制性扭曲示例:
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.
查看Giampaolo Rodola的 pyftpdlib。它是 Python 最好的 ftp 服务器之一。它用于 google 的 chromium(他们的浏览器)和 bazaar(版本控制系统)。它是 Python 上最完整的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)。
为什么不使用单行HTTP服务器呢?
python -m SimpleHTTPServer 8000
将通过 HTTP 在端口 8000 上提供当前工作目录的内容。
如果您使用 Python 3,则应改为编写
python3 -m http.server 8000
请参阅SimpleHTTPServer模块文档 2.x 和http.server文档 3.x。
顺便说一句,在这两种情况下,端口参数都是可选的。
上面的答案都是假设您的 Python 发行版将具有一些第三方库以实现“单线 python ftpd”目标,但@zio 所要求的情况并非如此。此外,SimpleHTTPServer 涉及用于下载文件的网络浏览器,它不够快。
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
将自动退出,工作完成。
对于 pyftpdlib 用户。我在 pyftpdlib 网站上找到了这个。这会创建对您的文件系统具有写访问权限的匿名 ftp,因此请谨慎使用。引擎盖下提供了更多功能以提高安全性,因此请看:
sudo pip3 install pyftpdlib
python3 -m pyftpdlib -w
## updated for python3 Feb14:2020
对于那些尝试使用上述不推荐使用的方法的人可能会有所帮助。
sudo python -m pyftpdlib.ftpserver
更简单的解决方案是用户 pyftpd 库。该库允许您在一行中旋转 Python FTP 服务器。虽然它没有默认安装,但我们可以使用简单的 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
安装:
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()
深入了解:
我不知道单线 FTP 服务器,但如果你知道
python -m SimpleHTTPServer
它将在 0.0.0.0:8000 上运行一个 HTTP 服务器,提供当前目录之外的文件。如果您正在寻找一种通过网络浏览器快速从 linux 机器上获取文件的方法,那么您将无法击败它。