FTP «425 Не удается открыть соединение для передачи данных» происходит только при использовании командной строки

8

Все мои компьютеры находятся за одним маршрутизатором. У меня на одном из них работает сервер FileZilla. Я пытаюсь автоматизировать загрузку на сервер, используя пакетный скрипт и встроенный в Windows ftp.exe. Я настроил службу динамического DNS, чтобы иметь возможность доступа к моему серверу снаружи маршрутизатора, и я настроил переадресацию портов в маршрутизаторе на мой сервер. Я могу подключиться и передать просто отлично, используя Google Chrome, Windows Explorer и клиент FileZilla. Однако всякий раз, когда я пытаюсь использовать ftp.exe (вручную или в пакетном скрипте), я могу подключиться к серверу, но если я пытаюсь сделать что-либо, что может открыть соединение для передачи данных (LIST, STOR или RETR), я получаю следующую ошибку: 425 Не удается открыть соединение для передачи данных. Я разрешил ftp.exe в брандмауэрах обоих компьютеров. Есть идеи, что происходит или как я могу это исправить? Мне не нужно использовать FTP.

РЕДАКТИРОВАТЬ Я знаю, что мой провайдер блокирует многие порты, включая 21 и несколько других в этом диапазоне. Это все настроено на порте 2121, с пассивными портами, настроенными на 2122-2142, все они были переданы в маршрутизаторе. Возможно, ftp.exe будет использовать только определенный порт для подключения к данным, который мой интернет-провайдер заблокировал? Если так, как бы я изменил это?

Garrett
источник

Ответы:

5

Обычный активный FTP использует отдельное инициируемое сервером соединение для передачи данных и использует только обычное соединение через порт 21 в качестве канала управления. Однако когда клиент находится за брандмауэром, он может блокировать это соединение. Я предполагаю, что Chrome, Explorer, FireZilla и т. Д. Достаточно умны, чтобы попробовать пассивный режим, в котором исходное инициируемое клиентом соединение используется как канал управления и передачи данных.

Похоже, что по умолчанию Windows CLI FTP-клиент не поддерживает пассивный режим. Так что вам нужно переключиться на NcFTP . В качестве альтернативы, и я думаю, что, вероятно, лучший вариант, это просто использовать SFTP. FTP небезопасен и действительно используется только в локальных сетях. SFTP полностью зашифрован, а также использует только один канал для данных и команд. Если вам нужен CLI SFTP-клиент, PSFTP - хороший вариант.

Lèse Majesté
источник
Я уже попробовал это без удачи
Гарретт
@Garrett: Хммм ... похоже, что статья в блоге, на которую я ссылался, неверна, и FTP-клиент CLI по умолчанию не поддерживает пассивный режим. В этом случае вам придется переключать клиентов FTP. NcFTP - один из вариантов, и он определенно поддерживает пассивный режим.
Lèse Majesté
Я наблюдал за запросом / ответом при передаче через Windows Explorer, использовал кавычку для ручной отправки точно таких же команд, но все еще получал ту же ошибку
Garrett
@Garrett: я думал, что Windows Explorer работает? Если клиент не поддерживает пассивный режим, то указание серверу переключиться на него не имеет значения.
Lèse Majesté
Поддерживает ли он командную строку и является ли он независимым exe?
Гаррет
0

Windows FTP CLI поддерживает режим PASSIVE. Используйте «quote pasv» для входа в пассивный режим.

Джордж Риос
источник
2
Я не думаю, что это на самом деле работает . Можете ли вы подтвердить, что на quote pasvсамом деле что-то делает в ftp.exe, а не является фиктивной командой?
Lèse Majesté
0

У меня тоже была эта проблема. Решением было остановить брандмауэр антивируса (в моем случае McAfee), он блокировал порты FTP.

Sfalcini
источник
Это не совсем решение.
ivan_pozdeev