Скорее всего, конфликт между активным и пассивным режимом. Убедитесь, что выполнено одно из следующих действий:
- Сервер поддерживает режим PASV, а ваш клиент настраивает режим PASV
- Если сервер не поддерживает пассивный режим, ваш брандмауэр должен поддерживать FTP-передачу в активном режиме.
РЕДАКТИРОВАТЬ: я посмотрел документы и обнаружил, что в Python 2.1 и более поздних версиях по умолчанию пассивный режим. С каким сервером вы разговариваете, и знаете ли вы, поддерживает ли он пассивный режим?
В активном режиме (не PASV) клиент отправляет команду PORT, указывающую серверу инициировать соединение DATA на этом порту, что требует, чтобы брандмауэр знал о команде PORT, чтобы он мог перенаправить входящее соединение DATA вам - немногие брандмауэры поддерживают это. В пассивном режиме клиент открывает соединение DATA, и сервер использует его (сервер «пассивен» при открытии соединения данных).
На случай, если вы не используете пассивный режим, выполните ftp.set_pasv(True)
и посмотрите, будет ли это иметь значение.