В Ubuntu ftp -p для пассивного режима работает нормально.
Как мне сделать то же самое в Windows?
Я пробовал с quote pasv , но я получаю следующую ошибку:
Мой брандмауэр отключен.
Windows фактически не поддерживает пассивный режим.
Вы можете отправить команду на сервер тремя разными способами, но это не позволит включить пассивный режим на стороне клиента Windows.
Эти аргументы предназначены для отправки различных команд, а pasv — это не то, о чем думала Microsoft, когда они ее написали.
Вам нужно будет найти стороннее программное обеспечение, такое как WinSCP, которое поддерживает использование командной строки и использует это вместо родного Windows.
Клиент командной строки Windows FTP ( ftp.exe ) не поддерживает пассивный режим в любой версии Windows. Это делает его сегодня бесполезным из-за вездесущих брандмауэров и NAT.
Использование quote pasv не поможет. Он переключает только сервер в пассивный режим, но не клиент.
Вместо этого используйте любой другой клиент командной строки Windows FTP. Большинство других поддерживают пассивный режим.
Например WinSCP по умолчанию используется пассивный режим и существует руководство для преобразования Windows FTP script для WinSCP script.
Хотя это не отвечает на вопрос непосредственно о командной строке, но из ОС Windows, используйте проводник Windows ftp://username@server
по умолчанию будет использоваться пассивный режим
Для командной строки активный режим по умолчанию
Команда quote PASV не является командой программы ftp.exe , это команда FTP-сервера, запрашивающая порт высокого порядка для передачи данных. Пассивная передача — это та, в которой данные FTP по этим портам высокого порядка, в то время как управление поддерживается в нижних портах.
Программа windows ftp.exe может использоваться для отправки команд FTP-сервера для пассивной передачи данных между двумя FTP-серверами. Стандартная установка Windows не будет и, вероятно, не должна иметь службу FTP-сервера, работающую как конечную точку для пассивных передач. Поэтому, если требуется пассивная передача со стандартным окном, требуется другое решение, кроме ftp.exe , как FTPing для localhost, поскольку одно из соединений не будет работать в большинстве оконных сред.
Вы можете осуществлять пассивную передачу FTP между двумя разными хостами (но не с двумя соединениями на одном хосте) следующим образом:
Откройте два запроса, используйте один для ftp.exe для подключения к исходному FTP-серверу, а один к ftp.exe подключитесь к вашему FTP-серверу назначения.
Теперь установите пассивное соединение между серверами, используя необработанные команды PASV и PORT. Команда quote PASV ответит IP/портом в многоточии. Используйте эти данные для команды quote PORT . Ваша пассивная ссылка теперь установлена, если брандмауэры не заблокировали один или несколько из четырех портов (2 для управления FTP, 2 для данных FTP)
Затем начните прием данных с помощью команды quote STOR на принимающий FTP-сервер, затем отправьте управляющую команду quote RETR на исходный FTP-сервер.
Cavet: я подключаюсь к некоторым старым FTP-серверам YMMV
При работе по протоколу FTP между клиентом и сервером устанавливается два соединения – управляющее (по нему идут команды) и соединение передачи данных (по нему передаются файлы).
Управляющее соединение одинаково для Активного и Пассивного режима. Клиент инициирует TCP -соединение с динамического порта (1024-65535) к порту номер 21 на FTP -сервере и говорит «Привет! Я хочу подключиться к тебе. Вот мое имя и мой пароль». Дальнейшие действия зависят от того, какой режим FTP (Активный или Пассивный) выбран.
В активном режиме, когда клиент говорит «Привет!» он так же сообщает серверу номер порта (из динамического диапазона 1024-65535) для того, чтобы сервер мог подключиться к клиенту для установки соединения для передачи данных. FTP -сервер подключается к заданному номеру порта клиента используя со своей стороны номер TCP -порта 20 для передачи данных.
В пассивном режиме, после того как клиент сказал «Привет!», сервер сообщает клиенту номер TCP -порта (из динамического диапазона 1024-65535), к которому можно подключиться для установки соединения передачи данных.
Главное отличие между активным режимом FTP и пассивным режимом FTP – это сторона, которая открывает соединение для передачи данных. В активном режиме, клиент должен принять соединение от FTP -сервера. В пассивном режиме, клиент всегда инициирует соединение.
Инструменты пользователя
Инструменты сайта
Содержание
Введение
Клиент посылает запросы серверу и принимает файлы. В качестве клиентов могут использоваться — internet explorer, Windows Commander, NetVampir, gftp и т.д.
Сервер обрабатывает запросы клиента на получение файла. В качестве серверов могут использоваться — vsftpd, IIS, wuftpd, proftpd и т.д.
Режимы работы FTP: активный и пассивный
В Активном режиме, когда клиент говорит «Привет!» он так же сообщает серверу номер порта (из динамического диапазона 1024-65535) для того, чтобы сервер мог подключиться к клиенту для установки соединения для передачи данных. FTP -сервер подключается к заданному номеру порта клиента используя со своей стороны номер TCP-порта 20 для передачи данных.
В Пассивном режиме, после того как клиент сказал «Привет!», сервер сообщает клиенту номер TCP-порта (из динамического диапазона 1024-65535), к которому можно подключится для установки соединения передачи данных. Главное отличие между Активным режимом FTP и Пассивным режимом FTP — это сторона, которая открывает соединение для передачи данных. В Активном режиме, клиент должен принять соединение от FTP -сервера. В Пассивном режиме, клиент всегда инициирует соединение.
Первоначальная настройка брандмауера
Создаем минимальный набор правил в нашем фаерволе. Этот пример создан лишь для того, чтобы показать принцип работы iptables. Для более углубленного понимания работы iptables рекомендую прочитать статью Оскара Андерсона в переводе Андрея Кисилева — Iptables Tutorial 1.1.19, которая считается классикой.
eth0 — смотрит в локальную сеть, eth1 — смотрит в мир. Данным скриптом (firewall.sh) удобно пользоваться на стадии отладки правил.
После того, как у вас все настроено, лучше воспользоваться штатными средствами управления iptables. Для этого воспользуемся скриптом для сохранения текущих правил в файл. В разных дистрибутивах набор правил может сохраняться по отличному от /etc/sysconfig/iptables пути. Данный путь является стандартным для Red Hat дистрибутивов и его клонов, например CentOS.
Но при таких настройках фаервола ftp через nat еще не будет работать. Для облегчения нашей задачи воспользуемся специальным модулем, который и был разработан как раз для этих целей. Загрузим модуль ip_nat_ftp, который и будет выполнять всю черную работу вместо нас.
Обратите внимание, что в цепочке eth0-eth1, через которую проходят все транзитные пакеты, мы открыли только порт 21 и разрешили прохождение пакетов с состоянием RELATED и ESTABLISHED. Для работы ftp как в активном так и в пассивном режимах больше ничего не требуется, все остальные заботы берут на себя модули ip_nat_ftp и ip_conntrack_ftp.
Тестирование
После того, как мы загрузили модуль и правил можно приступить непосредственно к тестированию. Для этого можно воспользоваться любимым ftp клиентом и попробовать соединиться с любым ftp сервером. В качестве клиента я использовал ftp клиент встроенный в far, который позволяет использовать как активный, так и пассивный режимы. Если под рукой нет никакого ftp клиента всегда можно воспользоваться встроенным в windows клиентом как показано ниже.
Для наглядности можно посмотреть с помощью tcpdump что происходит при попытке подключиться к удаленному ftp серверу.
Ну вот собственно и вся настройка. Для того, чтобы каждый раз при загрузке системы модуль ip_nat_ftp загружался автоматически необходимо внести небольшие изменения в файл /etc/sysconfig/iptables-config.
После этого при перезагрузке iptables или системы в целом данный модуль будет загружаться автоматически, а также подгружать все необходимые модули.