2015-12-07 14 views
5

Sto lavorando su un programma di connessione tls implicito con python ftplib. Ho provato la soluzione fornita nella domanda python-ftp-implicit-tls-connection-issue (incluse le risposte di Rg Glpj e Juan Moreno) per effettuare la connessione. Ma quando chiamo retrline o retrbinary dopo l'accesso al server FTP come questo (FTP_ITLS è la sottoclasse di FTP_TLS):EOF si è verificato in violazione del protocollo con python ftplib

58 server = FTP_ITLS() 
59 server.connect(host="x.x.x.x", port=990) 
60 server.login(user="user", passwd="******") 
61 server.prot_p() 
62 
63 server.cwd("doc") 
64 print(server.retrlines('LIST')) 
65 # server.retrbinary('RETR contents.7z', open('contents.7z', 'wb').write) 
66 server.quit() 

ho ottenuto un errore EOF:

Traceback (most recent call last): 
    File "D:/Coding/test/itls.py", line 64, in <module> 
    print(server.retrlines('LIST')) 
    File "D:\Python\Python27\lib\ftplib.py", line 735, in retrlines 
    conn = self.transfercmd(cmd) 
    File "D:\Python\Python27\lib\ftplib.py", line 376, in transfercmd 
    return self.ntransfercmd(cmd, rest)[0] 
    File "D:\Python\Python27\lib\ftplib.py", line 713, in ntransfercmd 
    server_hostname=self.host) 
    File "D:\Python\Python27\lib\ssl.py", line 352, in wrap_socket 
    _context=self) 
    File "D:\Python\Python27\lib\ssl.py", line 579, in __init__ 
    self.do_handshake() 
    File "D:\Python\Python27\lib\ssl.py", line 808, in do_handshake 
    self._sslobj.do_handshake() 
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:590) 

quanto pare ftplib utilizza PROTOCOL_SSLv23 come protocollo predefinito in Python 2.7, ho provato PROTOCOL_TLSv1, PROTOCOL_TLSv1_1 e PROTOCOL_TLSv1_2, ma nessuno di questi ha funzionato. E ho anche provato a sovrascrivere ntransfercmd e auth o impostare ctx = ssl._create_stdlib_context(ssl.PROTOCOL_TLSv1) come ha detto Steffen Ullrich nella domanda connect-to-ftp-tls-1-2-server-with-ftplib, ma l'errore non è mai scomparso. Cosa posso fare allora? Grazie.

risposta

0

Mi sono imbattuto in questo tentativo di connettersi a un server FTP FileZilla. FileZilla ha un'impostazione nelle "Impostazioni FTP su TLS" chiamata "Richiedi la ripresa della sessione TLS sulla connessione dati quando si utilizza PROT P". La disabilitazione di questa opzione ha risolto questo problema.

Se non si ha il controllo del server, consultare FTPES - Session Reuse Required che spiega come abilitare il riutilizzo della sessione. Questo sembra richiedere Python 3.6+, tuttavia.

Problemi correlati