2017-07-27 106 views
1

你好,我正試圖做一個簡單的讀寫文件從一個簡單的FTP文件zilla服務器使用被動模式和顯式tls我已經設置好,可以和他們的文件zilla客戶端一起工作。我無法弄清楚在讀或寫時如何解決這個錯誤。命令做其他事情一樣的mkdir做工精細以及python3 ftplib SSLEOFError(8,'EOF發生違反協議(_ssl.c:645)')

>>> from ftplib import FTP_TLS 
>>> import subprocess 
>>> import io 
>>> import os 
>>> import sys 
>>> from datetime import datetime, date, time 
>>> from os.path import basename 
>>> local_filename = os.path.join(os.getcwd(), 'KansasCityTestData.csv') 
>>> print(local_filename) 
/var/www/KansasCityTestData.csv 
>>> myfile = open(local_filename, 'wb') 
>>> myfile 
<_io.BufferedWriter name='/var/www/KansasCityTestData.csv'> 
>>> command = 'RETR /%s' % 'KansasCityTestData.csv' 
>>> command 
'RETR /KansasCityTestData.csv' 
>>> ftp = FTP_TLS('111.111.111.111') #except my real info 
>>> ftp.login('myuser', 'mypass') 
'230 Logged on' 
>>> ftp.prot_p() 
'200 Protection level set to P' 
>>> ftp.set_pasv(True) 
>>> ftp.retrbinary(command, myfile.write) 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/lib/python3.5/ftplib.py", line 441, in retrbinary 
with self.transfercmd(cmd, rest) as conn: 
    File "/usr/lib/python3.5/ftplib.py", line 398, in transfercmd 
    return self.ntransfercmd(cmd, rest)[0] 
    File "/usr/lib/python3.5/ftplib.py", line 796, in ntransfercmd 
    server_hostname=self.host) 
    File "/usr/lib/python3.5/ssl.py", line 377, in wrap_socket 
    _context=self) 
    File "/usr/lib/python3.5/ssl.py", line 752, in __init__ 
    self.do_handshake() 
    File "/usr/lib/python3.5/ssl.py", line 988, in do_handshake 
    self._sslobj.do_handshake() 
    File "/usr/lib/python3.5/ssl.py", line 633, in do_handshake 
    self._sslobj.do_handshake() 
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645) 

我使用在Ubuntu 16.04 python3.5.2。我一直在尋找很多類似的問題,但似乎並不適用於ftp。我所能找到的是,python3支持顯式tls很好。任何幫助是極大的讚賞。

回答

0

所以我想通了,這個答案是不是在任何其他線程我可以罰款。它讓我們知道服務器已經爲被動連接啓用了會話重用,並且直到python3.6才被支持。所以我關掉了這個要求,它運行良好。在filezilla中,它被稱爲 「使用prot_p時需要在數據連接上恢復TLS會話」。

相關問題