2011-04-04 81 views
7

Necesito un cliente de python para hacer FTPES (explícito), ¿alguien tiene experiencia con cualquier paquete de Python que pueda hacer esto?FTPES - FTP sobre TLS/SSL explícito en Python

no soy capaz de hacer esto en Python, pero se puede conectar con el servidor FTP usando herramientas como FileZilla

Gracias

Respuesta

0

Si puede usar un cliente SFTP, está dotado de paramiko ... sin embargo , SFTP y FTP sobre SSL (FTPS) son diferentes ...

import paramiko as pm 
import socket 
# sftp client... 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.settimeout(20) 
sock.connect((hostname, port)) 
trans = pm.Transport(sock) 
trans.connect(hostkey=None ,username=username, password=password, pkey=None) 
chan = trans.open_session() 
chan.get_pty() 
chan.invoke_shell() 
sftp = pm.SFTP.from_transport(trans) 

Mi googlear indica que el FTP sobre SSL podría estar disponible en ftplib, aunque no he probado este mecanismo de mí mismo ... el método se FTP_TLS solo agregado en python 2.7

9

FTP-SSL explícito está bien apoyado por Python nativo. Después de configurar la conexión, puede usar todos los comandos estándar de ftplib. Más se puede encontrar en: http://docs.python.org/2/library/ftplib.html#ftplib.FTP_TLS

Aquí hay un ejemplo básico para la descarga de un archivo:

from ftplib import FTP_TLS 
ftps = FTP_TLS('ftp.MySite.com') 
ftps.login('testuser', 'testpass')   # login anonymously before securing control channel 
ftps.prot_p()   # switch to secure data connection.. IMPORTANT! Otherwise, only the user and password is encrypted and not all the file data. 
ftps.retrlines('LIST') 

filename = 'remote_filename.bin' 
print 'Opening local file ' + filename 
myfile = open(filename, 'wb') 

ftps.retrbinary('RETR %s' % filename, myfile.write) 

ftps.close() 
2

Para mí esto funcionó: (inicio de sesión después de autenticación). Tomado de Nullege. Parecen ser pruebas para ftplib.

self.client = ftplib.FTP_TLS(timeout=10) 
self.client.connect(self.server.host, self.server.port) 

# enable TLS 
self.client.auth() 
self.client.prot_p() 

self.client.login(user,pass)