У меня проблемы с FTP_TLS (ftplib) в Python 2.7.3.Ошибка EOF с ftplib только при подключении к серверу, размещенному на GoDaddy
Резюме выводов (все попытки соединения выполняются через Интернет):
- FileZilla на главную веб-сервер - работает
- FileZilla на GoDaddy виртуальный хостинг сервер - работает
- Python на главную веб-сервер - работает
- Python для GoDaddy общий хостинг-сервер - терпит неудачу (см стека ниже)
Следующий код показывает, как я воспроизвожу проблему. При подключении к моему домашнему серверу этот код генерирует идентичный журнал моего личного FTP как FileZilla. (Только при подключении к сайту GoDaddy это приводит к исключению EOF).
from ftplib import FTP_TLS
o = FTP_TLS(ftpServer,ftpUsername,ftpPassword,ftpPort)
o.voidcmd('SYST')
o.voidcmd('FEAT')
o.prot_p()
o.voidcmd('PWD')
o.retrbinary('MLSD', open('OUTTEST', 'wb').write)
>>> o.retrbinary('MLSD', open('OUTTEST', 'wb').write)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/ftplib.py", line 703, in retrbinary
return self.voidresp()
File "/usr/lib/python2.7/ftplib.py", line 225, in voidresp
resp = self.getresp()
File "/usr/lib/python2.7/ftplib.py", line 211, in getresp
resp = self.getmultiline()
File "/usr/lib/python2.7/ftplib.py", line 197, in getmultiline
line = self.getline()
File "/usr/lib/python2.7/ftplib.py", line 187, in getline
if not line: raise EOFError
Я прочитал, что ошибка EOF задается, когда сервер закрывает трубу. Это также похоже на то, что происходит, если вы перейдете на prot_p, а затем попытаетесь выпустить команду простого текста (хотя, насколько я могу судить, здесь это не так).
Я не понимаю, что отличает мой код от FileZilla. Тот факт, что все попытки выполняются через Интернет, успокаивает меня, что он не связан с брандмауэрами. Кроме того, FileZilla работает, поэтому с технической точки зрения соединение возможно, мне просто трудно достичь его с помощью Python.
Мой код работает с FTP GoDaddy, если я не выдаю переключатель prot_p.
Дополнительная информация:
- GoDaddy не предоставляет технических журналов FTP (только использование журналы)
- Мой код работает безупречно в течение года, это только начало происходить два месяца назад.
- GoDaddy FTP-сервер идентифицирует как "Pure-Ftpd [privsep] [TLS]"
Типичные FileZilla Server Log после того, как работает мой код.
(000132)18/10/2016 15:44:19 - (not logged in) (IP_ADDRESS)> Connected on port 21, sending welcome message...
(000132)18/10/2016 15:44:19 - (not logged in) (IP_ADDRESS)> 220-FileZilla Server 0.9.57 beta
(000132)18/10/2016 15:44:19 - (not logged in) (IP_ADDRESS)> 220-written by Tim Kosse ([email protected])
(000132)18/10/2016 15:44:19 - (not logged in) (IP_ADDRESS)> 220 Please visit https://filezilla-project.org/
(000132)18/10/2016 15:44:19 - (not logged in) (IP_ADDRESS)> AUTH TLS
(000132)18/10/2016 15:44:19 - (not logged in) (IP_ADDRESS)> 234 Using authentication type TLS
(000132)18/10/2016 15:44:19 - (not logged in) (IP_ADDRESS)> SSL connection established
(000132)18/10/2016 15:44:19 - (not logged in) (IP_ADDRESS)> USER ********************
(000132)18/10/2016 15:44:19 - (not logged in) (IP_ADDRESS)> 331 Password required for USER_NAME
(000132)18/10/2016 15:44:19 - (not logged in) (IP_ADDRESS)> PASS ********************
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> 230 Logged on
(000131)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> disconnected.
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> SYST
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> 215 UNIX emulated by FileZilla
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> FEAT
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> 211-Features:
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> MDTM
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> REST STREAM
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> SIZE
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> MODE Z
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> MLST type*;size*;modify*;
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> MLSD
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> AUTH SSL
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> AUTH TLS
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> PROT
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> PBSZ
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> UTF8
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> CLNT
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> MFMT
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> EPSV
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> EPRT
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> 211 End
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> PBSZ 0
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> 200 PBSZ=0
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> PROT P
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> 200 Protection level set to P
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> PWD
(000132)18/10/2016 15:44:19 - USER_NAME (IP_ADDRESS)> 257 "/" is current directory.
(000132)18/10/2016 15:44:22 - USER_NAME (IP_ADDRESS)> TYPE I
(000132)18/10/2016 15:44:22 - USER_NAME (IP_ADDRESS)> 200 Type set to I
(000132)18/10/2016 15:44:22 - USER_NAME (IP_ADDRESS)> PASV
(000132)18/10/2016 15:44:22 - USER_NAME (IP_ADDRESS)> 227 Entering Passive Mode (xxx,xxx,xxx,xxx,xxx,xxx)
(000132)18/10/2016 15:44:22 - USER_NAME (IP_ADDRESS)> MLSD
(000132)18/10/2016 15:44:22 - USER_NAME (IP_ADDRESS)> 150 Opening data channel for directory listing of "/"
(000132)18/10/2016 15:44:22 - USER_NAME (IP_ADDRESS)> SSL connection for data connection established
(000132)18/10/2016 15:44:22 - USER_NAME (IP_ADDRESS)> 226 Successfully transferred "/"
Я просто заметил другую ошибку дается на Windows, >>> о.retbinary ('MLSD', open ('OUTTEST', 'wb'). write) Traceback (последний последний звонок): Файл «», строка 1, в Файл «C: \ Program Files \ Python \ lib \ ftplib.py ", строка 449, в retrbinary conn.unwrap() Файл« C: \ Program Files \ Python \ lib \ ssl.py », строка 788, в развертке s = self._sslobj.shutdown () OSError: [Errno 0] Ошибка Это привело меня сюда http://stackoverflow.com/questions/32913943/error-0-when-using-ftplib, где пользователь dtf замечает, что проблема с совместимостью с PureFTP. Я сейчас изучаю это. –
admin0389
Хорошо, я уверен, что это связано с повторным использованием сеанса SSL. К сожалению, ftplib не поддерживает эту функцию (и это действительно так) В качестве теста я попытался подключиться к моему домашнему серверу FileZilla, и он отлично работает, но когда я выбираю «Требовать возобновление сеанса TLS при подключении к данным при использовании PROT P «в разделе« Настройки FTP через TLS »в настройках сервера FileZilla, я получаю такую же ошибку, как при попытке подключиться к серверу GoDaddy. – admin0389