9

I was wondering if anybody could point me towards a free ftps module for python.

I am a complete newbie to python, but this is something I need for a work project. I need an ftps client to connect to a 3rd party ftps server.

thanks,

David.

David Turner
  • 5,014
  • 6
  • 26
  • 27

7 Answers7

9

I believe you could use Twisted to implement FTPS by simply using its FTP implementation, but changing the FTPClient.connectFactory attribute to be a function that does something with connectSSL rather than connectTCP.

Are you sure you want FTPS though? SFTP is a different, better, and much more popular protocol these days: Twisted contains an SFTP implementation as well.

Glorfindel
  • 21,988
  • 13
  • 81
  • 109
Glyph
  • 31,152
  • 11
  • 87
  • 129
  • 1
    connectSSL can be used for implicit FTPS connection, but explicit FTPS (using AUTH command) is more popular than implicit FTPS. Still Twisted FTP implementation is a good start. Implementing AUTH (and co) together with altering DTP.connectionMade could be the next step. – Adi Roiban Feb 09 '11 at 05:24
8

The ftplib module in Python version 2.7.1 has all of the functionality you will need, including TLS support.

http://docs.python.org/library/ftplib.html#module-ftplib

bb1
  • 81
  • 1
  • 1
4

M2Cypto has a FTPS module. From the documentation:

>>> 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.'
>>>

Alternatively, if you wanted to minimise use of third-party modules, you should be able to subclass the standard library's ftplib.FTP class with the built-in (to Python) SSL support. M2Crypto (or Twisted, if you want to go that way) is the easier solution, though.

Tony Meyer
  • 10,079
  • 6
  • 41
  • 47
3

Twisted seems to have some implementation of FTPS (FTP over SSL) under the conch sub-project. I am no twisted expert, but Glyph, the twisted man himself, is listed in this site. Maybe by following his answer to another question, you can find more details (good luck).

Community
  • 1
  • 1
gimel
  • 83,368
  • 10
  • 76
  • 104
  • Thanks for the plug :). But FTPS (FTP, but over SSL) is not the same thing as SFTP (file transfer over SSH, not really related to the FTP protocol at all). – Glyph Oct 16 '08 at 11:54
2

As for the server implementation you can take a look at pyftpdlib: http://code.google.com/p/pyftpdlib/ It includes a demo script implementing a working FTPS server: http://code.google.com/p/pyftpdlib/source/browse/trunk/demo/tls_ftpd.py

As for the client implementation I provided a patch which will be included in python 2.7 and 3.2. http://bugs.python.org/issue2054

Giampaolo Rodolà
  • 12,488
  • 6
  • 68
  • 60
0

I haven't tried it myself (yes, I just used Google and followed some links), but http://www.lag.net/paramiko/ seems to be the recommended solution. From a cursory glance, it's an SSH implementation in pure Python, which allows tunneling for things like FTP.

Update: a commenter pointed out that I mixed up sftp and ftps, sorry. I still suggest at least investigating Paramiko briefly to see if it matches the requirements.

unwind
  • 391,730
  • 64
  • 469
  • 606
0

I couldn't find a free sftp client for windows so I ended up wrapping Putty's PSFTP using python's subprocess module. I probably would have used the twisted implementation mentioned by Glyph if i'd known about it.

Anyway if your interested it's available at:

http://code.google.com/p/psftplib/

monkut
  • 42,176
  • 24
  • 124
  • 155