Я получаю странную ошибку при попытке отправить файл на удаленный FTP-сервер, используя FTP через SSL / TLS.Я не нашел никаких следов решения онлайн: / Пожалуйста, помогите.
Вот мой код:
from ftplib import FTP_TLS
import sys, os
root = "\\home\\user\\test.txt"
dest = "/Destdir"
ftps = FTP_TLS('xxx.xxx.xxx.xxx')
ftps.set_debuglevel(1)
ftps.set_pasv(False)
ftps.connect(port=21, timeout=80)
ftps.login('user', 'pass')
ftps.prot_p()
ftps.ccc()
try:
ftps.cwd(dest)
except Exception as e:
print(e)
try:
file = open('test.txt', 'rb')
ftps.storbinary('STOR test.txt', file)
file.close()
except Exception as e:
print(e)
ftps.close()
А вот и вывод сценария:
*resp* '220 nas FTP server ready.'
*cmd* 'AUTH TLS'
*resp* '234 AUTH TLS command successful.'
*cmd* 'USER user'
*resp* '331 Password required for user.'
*cmd* 'PASS **********'
*resp* '230 User user logged in.'
*cmd* 'PBSZ 0'
*resp* '200 PBSZ command successful (PBSZ=0).'
*cmd* 'PROT P'
*resp* '200 Protection level set to Private.'
*cmd* 'CCC'
*resp* '200 Clearing control channel protection.'
*cmd* 'CWD /Destdir'
*resp* '250 CWD command successful.'
*cmd* 'TYPE I'
*resp* '200 Type set to I.'
*cmd* 'PORT 10,10,99,11,220,211'
*resp* '200 PORT command successful.'
*cmd* 'STOR test.txt'
*resp* "150 Opening BINARY mode data connection for 'test.txt'."
_ssl.c:704: The handshake operation timed out
Как соединениек удаленному FTP-серверу это нормально, тогда, я полагаю, это не проблема брандмауэра.
Примечание. Удаленный FTP-сервер - это NAS-устройство Synology с установленной операционной системой.
EDIT_0:
Еще одна попытка с пассивным режимом дала такой результат:
*resp* '220 nas FTP server ready.'
*cmd* 'AUTH TLS'
*resp* '234 AUTH TLS command successful.'
*cmd* 'USER user'
*resp* '331 Password required for user.'
*cmd* 'PASS **********'
*resp* '230 User user logged in.'
*cmd* 'PBSZ 0'
*resp* '200 PBSZ command successful (PBSZ=0).'
*cmd* 'PROT P'
*resp* '200 Protection level set to Private.'
*cmd* 'CCC'
*resp* '200 Clearing control channel protection.'
*cmd* 'CWD /Destdir'
*resp* '250 CWD command successful.'
*cmd* 'TYPE I'
*resp* '200 Type set to I.'
*cmd* 'PASV'
*resp* '227 Entering Passive Mode (xxx,xxx,xxx,xxx,216,241)'
*cmd* 'STOR test.txt'
*resp* "150 Opening BINARY mode data connection for 'test.txt'."
_ssl.c:704: The handshake operation timed out
Я также пробовал расширенный пассивный режим, но он тоже не помог:
*resp* '250 CWD command successful.'
*cmd* 'TYPE I'
*resp* '200 Type set to I.'
*cmd* 'EPSV'
*resp* '229 Entering Extended Passive Mode (|||55536|)'
*cmd* 'STOR test.txt'
*resp* "150 Opening BINARY mode data connection for 'test.txt'."
_ssl.c:704: The handshake operation timed out
EDIT_1: Таким образом, скрипт работает частично, он может открыть соединение, начинает передачу файла.Файл get создается на удаленном сервере, но он не содержит те же данные, что и исходный файл.Конечный файл имеет размер 1 КБ и несколько случайных символов (файл закодирован в ANSII, а исходный файл - в формате UTF8. Тем временем я могу успешно загрузить файл с помощью WinSCP.