我想知道是否有人可以将我指向 python 的免费 ftps 模块。
我是 python 的新手,但这是我工作项目需要的东西。我需要一个 ftps 客户端来连接到第 3 方 ftps 服务器。
谢谢,
大卫。
我相信您可以使用 Twisted 通过简单地使用其 FTP 实现来实现 FTPS,但将FTPClient.connectFactory
属性更改为使用connectSSL
而不是connectTCP
.
你确定你想要FTPS吗? SFTP 是一种不同的、更好的、更流行的协议:Twisted 也包含一个 SFTP 实现。
Python 2.7.1 版中的 ftplib 模块具有您需要的所有功能,包括 TLS 支持。
>>> from M2Crypto import ftpslib
>>> f = ftpslib.FTP_TLS()
>>> f.connect('', 9021)
'220 spinnaker.dyndns.org M2Crypto (Medusa) FTP/TLS server v0.07 ready.'
>>> f.auth_tls()
>>> f.set_pasv(0)
>>> f.login('ftp', 'ngps@')
'230 Ok.'
>>> f.retrlines('LIST')
-rw-rw-r-- 1 0 198 2326 Jul 3 1996 apache_pb.gif
drwxrwxr-x 7 0 198 1536 Oct 10 2000 manual
drwxrwxr-x 2 0 198 512 Oct 31 2000 modpy
drwxrwxr-x 2 0 198 512 Oct 31 2000 bobo
drwxr-xr-x 2 0 198 14336 May 28 15:54 postgresql
drwxr-xr-x 4 100 198 512 May 16 17:19 home
drwxr-xr-x 7 100 100 3584 Sep 23 2000 openacs
drwxr-xr-x 10 0 0 512 Aug 5 2000 python1.5
-rw-r--r-- 1 100 198 326 Jul 29 03:29 index.html
drwxr-xr-x 12 0 0 512 May 31 17:08 python2.1
'226 Transfer complete'
>>> f.quit()
'221 Goodbye.'
>>>
或者,如果您想尽量减少对第三方模块的使用,您应该能够使用内置(对 Python)SSL 支持来继承标准库的ftplib .FTP 类。不过, M2Crypto (或Twisted,如果你想这样做的话)是更简单的解决方案。
至于服务器实现,您可以查看 pyftpdlib: http ://code.google.com/p/pyftpdlib/ 它包括一个实现工作 FTPS 服务器的演示脚本: http ://code.google.com/p/ pyftpdlib/source/browse/trunk/demo/tls_ftpd.py
至于客户端实现,我提供了一个补丁,它将包含在 python 2.7 和 3.2 中。 http://bugs.python.org/issue2054
我自己没有尝试过(是的,我只是使用谷歌并点击了一些链接),但http://www.lag.net/paramiko/似乎是推荐的解决方案。粗略一看,它是纯 Python 中的 SSH 实现,它允许为 FTP 之类的东西建立隧道。
更新:一位评论者指出我混淆了 sftp 和 ftps,抱歉。我仍然建议至少简要调查一下 Paramiko,看看它是否符合要求。
我找不到适用于 Windows 的免费 sftp 客户端,所以我最终使用 python 的 subprocess 模块包装了 Putty 的 PSFTP。如果我知道的话,我可能会使用 Glyph 提到的扭曲实现。
无论如何,如果您有兴趣,请访问: