Это определенно похоже на проблему, связанную с тем, находитесь ли вы в режиме PASSIVE
на своем FTP-соединении, и могут ли оба конца соединения поддерживать его.
документация ftplib предполагает, что он включен по умолчанию, что очень жаль, потому что Я собирался предложить вам включить его. Вместо этого я предлагаю вам set_debuglevel
туда, где вы можете увидеть нижние уровни протокола и посмотреть, в каком режиме вы находитесь. Это должно дать вам информацию о том, как действовать дальше. Либо вы находитесь в пассивном режиме, и другой конец не может справиться с этим должным образом, либо (надеюсь) вы этого не сделаете, но вы должны быть.
FTP и FTPS (но не SFTP) можно настроить так, чтобы сервер выполнял обратное соединение с клиентом для фактической передачи или чтобы клиент выполнял второе прямое соединение с сервером для передачи. Первый особенно подвержен осложнениям всякий раз, когда задействована трансляция сетевых адресов. Без TLS некоторые брандмауэры могут фактически переписать трафик сеанса FTP, чтобы заставить его работать волшебным образом, но с TLS это невозможно из-за шифрования.
Тот факт, что предположительно выполняется аутентификация, а затем время ожидания при попытке передачи данных (LIST требует 2-го соединения в одном или другом направлении), обычно является классическим симптомом установки, которая либо требует пассивного режима, ИЛИ вот это:
Подключитесь, как обычно, к порту 21, неявно защищая* управляющее соединение FTP перед аутентификацией. Для защиты подключения к данным пользователь должен явно запросить его, вызвав метод prot_p().
ftps.prot_p() # switch to secure data connection
ftps.retrlines('LIST') # list directory content securely
Я не часто работаю с FTPS, так как SFTP гораздо менее проблематичен, но если вы этого не делаете, удаленный сервер может не работать.
* обратите внимание, я подозреваю, что это предложение пытается сказать, что FTP_TLS «неявно защищает управляющее соединение FTP» в отличие от явной защиты соединения для передачи данных.
person
Michael - sqlbot
schedule
26.09.2013