Что такое код ftp_quit

Содержание

Блог системного администратора

Сайт посвящен тому с чем может столкнуться среднестатистический «эникейщик»

Kоды ответов FTP сервера

Для работы с лютым сервером очень полезно знать формат его ответов, так что сохраним себе не память коды ответов FTP сервера:
Ответ FTP сервера на любую команду состоит из трех цифр. Значение каждой цифры в каждой позиции:

Первая позиция:

  • 1 — команда принята к выполнению но еще не завершена
  • 2 — выполнение команды успешно завершено
  • 3 — команда принята и ожидается какая-либо дополнительная команда
  • 4 — в данный момент команда выполнена быть не может
  • 5 — невозможно выполнить команды не только в данный момент, но и вообще.

Вторая позиция:

  • 0 — синтаксическая ошибка
  • 1 — информационное сообщение
  • 2 — сообщение относится либо к управляющему соединению, либо к соединению данных
  • 3 — сообщения об аутентификации пользователя и его правах
  • 4 — значение не определено
  • 5 — сообщение о состоянии файловой системы

Третья позиция:
Третья цифра окончательно специфицирует ошибку.

Для ясности приведем полный список ошибок FTP:

  • 100 — Запрошенное действие инициировано, дождитесь следующего ответа прежде, чем выполнять новую команду.
  • 110 — Комментарий
  • 120 — Функция будет реализована через nnn минут
  • 125 — Канал открыт, обмен данными начат
  • 150 — Статус файла правилен, подготавливается открытие канала
  • 200 — Команда корректна
  • 202 — Команда не поддерживается
  • 211 — Системный статус или отклик на справочный запрос
  • 212 — Состояние каталога
  • 213 — Состояние файла
  • 214 — Справочное поясняющее сообщение
  • 220 — Слишком много подключений к FTP-серверу (можете попробовать позднее). В некоторых версиях указывает на успешное завершение промежуточной процедуры
  • 221 — Благополучное завершение по команде quit
  • 225 — Канал сформирован, но информационный обмен отсутствует
  • 226 — Закрытие канала, обмен завершен успешно
  • 227 — Переход в пассивный режим (h1,h2,h3,h4,p1,p2).
  • 228 — переход в длинный пассивный режим (длинный адрес, порт).
  • 229 — Переход в расширенный пассивный режим (|||port|).
  • 230 — Пользователь идентифицирован, продолжайте
  • 231 — Пользовательский сеанс окончен; Обслуживание прекращено.
  • 232 — Команда о завершении сеанса принята, она будет завершена по завершении передачи файла.
  • 250 — Запрос прошел успешно
  • 257 — «ПУТЬ» создан.
  • 331 — Имя пользователя корректно, нужен пароль
  • 332 — Для входа в систему необходима аутентификация
  • 350 — Запрошенное действие над файлом требует большей информации
  • 421 — Процедура не возможна, канал закрывается
  • 425 — Открытие информационного канала не возможно
  • 426 — Канал закрыт, обмен прерван
  • 434 — Запрашиваемый хост недоступен
  • 450 — Запрошенная функция не реализована, файл не доступен, например, занят
  • 451 — Локальная ошибка, операция прервана
  • 452 — Ошибка при записи файла (недостаточно места)
  • 500 — Синтаксическая ошибка, команда не может быть интерпретирована (возможно она слишком длинна)
  • 501 — Синтаксическая ошибка (неверный параметр или аргумент)
  • 502 — Команда не используется (нелегальный тип MODE)
  • 503 — Неудачная последовательность команд
  • 504 — Команда не применима для такого параметра
  • 530 — Система не загружена (not logged in)
  • 532 — Необходима аутентификация для запоминания файла
  • 550 — Запрошенная функция не реализована, файл не доступен, например, не найден
  • 551 — Запрошенная операция прервана. Неизвестный тип страницы.
  • 552 — Запрошенная операция прервана. Выделено недостаточно памяти
  • 553 — Запрошенная операция не принята. Недопустимое имя файла

Список FTP-команд для командной строки Windows

FTP команды предназначены для обмена файлами между компьютерами в частной сети или через интернет.

Существует три способа, с помощью которых можно получить доступ к FTP :

  • FTP-клиенты командной строки.
  • Браузер.
  • Графические FTP-клиенты .

Первые два — это простые средства, которые позволяют использовать браузер или клиентское приложение FTP — (например, FTP Voyager ) для подключения к FTP-серверу для обмена файлами. Используя интерфейс командной строки, нужно ввести набор команд для отправки или получения файлов с других компьютеров.

Операционные системы Windows , Macintosh X и Linux имеют встроенные клиенты командной строки, которые могут быть использованы для установления FTP-соединения . Чтобы инициировать соединение в Windows , введите в CMD команды FTP и нажмите Enter .

Команды FTP для командной строки Windows

Команда Описание
! Эта команда служит для перехода между операционной системой и FTP. Для возврата из операционной системы к командной строке FTP используется команда exit.
? Отображение справки для команды.
append Добавление текста в локальный файл.
ascii Переключение в ASCII режим передачи данных.
bell Включает/отключает режим подачи звукового сигнала.
binary Установка режима передачи двоичных файлов.
bye Выход из FTP.
cd Смена текущего каталога.
close Выход из FTP.
delete Удаление файла.
debug Включает/отключает отладочный режим.
dir Выводит список файлов.

dir -C = выводит файлы в расширенном формате.

dir -1 = выводит список файлов в алфавитном порядке.

dir -r = выводит список каталогов в обратном алфавитном порядке.

dir -R = выводит список всех файлов в текущем каталоге и подкаталогах.

dir -S = выводит список файлов в алфавитном порядке. disconnect выход из FTP. get Получение файл с удаленного компьютера. glob Переключает настройки расширения файла. В выключенном состоянии аргументы имен файлов в командах put и get воспринимаются буквально и не расширяются. hash Включает/отключает вывод на экран знака ‘#’. Когда опция включена, после каждых 1024 байт переданных данных отображается хеш-символ (#). help Отображает информацию о команде, если команда вводится после help. lcd Отображает локальный каталог, в котором была запущена команда. Если же после команды lcd указан путь – изменяет текущий локальный каталог. literal Отправка произвольной строки символов в качестве команды удаленному серверу с ожиданием единственного ответного кода. ls Эта ftp exe команда выводит файлы удаленного компьютера. mdelete Удаление нескольких файлов. mdir Вывод содержимого удаленных каталогов. mget Получение нескольких файлов. mkdir Создание каталога на удаленном компьютере. mls Вывод содержимого нескольких каталогов удаленного компьютера. mput Отправка нескольких файлов. open Устанавливает соединение. prompt Включает/отключает подсказку. put Отправка одного файла. pwd Вывод рабочего каталога. quit Завершение сеанса ftp. quote Отправка произвольной команды. recv Получение файла. remotehelp Получение справки о командах удаленной системы. rename Переименовывает файл. rmdir Удаляет каталог на удаленном компьютере. send Отправка одного файла. status Отображает текущее состояние включенных и отключенных параметров. trace Включает трассировку пакетов. Type Устанавливает тип передачи файлов. user Отправка сведений о пользователе для входа на сервер. verbose Включает/ отключает режим информирования.

FTP команды для Windows

FTP параметры для командной строки Windows

Параметры CMD используются для изменения работы команд FTP . Параметр командной строки обычно следует за основной командой FTP через пробел. Вот список часто используемых параметров командной строки FTP для Windows® :

Параметр командной строки Описание
-v Отключение вывода на экран ответов с удаленного сервера.
-n Отключение автоматического входа при начальном подключении.
-i Отключение интерактивных запросов при передаче нескольких

файлов. -d Включение отладочного режима, отображает все команды FTP, передаваемые между клиентом и сервером. -g Отключение расширения файлов, которое разрешает использование подстановочных символов в именах локальных файлов и путей. -s:filename Задание текстового файла, содержащего команды FTP, которые

будут выполняться автоматически при запуске FTP. Пробелы в этом параметре не допускаются. Используйте этот параметр вместо перенаправления (>). -a Использование локального интерфейса для привязки соединения. -w:windowsize Переопределение стандартного размера буфера передачи (65535). computer Задание имени или IP адреса удаленного узла, к которому необходимо подключиться. Компьютер, если он указан, должен быть последним параметром в строке.

FTP параметры командной строки для Windows

Консольный FTP-клиент , встроенный в Windows и Mac OS X — это надежный инструмент для тестирования, поиска и устранения неисправностей. Изучение приведенных выше cmd ftp команд поможет вам обмениваться файлами между компьютерами без установки дополнительного программного обеспечения.

FTP не является надежным способом обмена конфиденциальной информацией. Из-за ограничений этого протокола организации, как правило, используют для передачи файлов протоколы FTPS и SFTP . Технология управляемой передачи файлов ( MFT ) поддерживает эти протоколы безопасности.

Данная публикация представляет собой перевод статьи « List of FTP commands for Windows command-line interface » , подготовленной дружной командой проекта Интернет-технологии.ру

Команды FTP

Читайте также:

  1. R-команды
  2. Арифметические переменные. Команды VARIABLE (FVARIABLE)
  3. Команды
  4. Команды DOS и Norton Commander
  5. КОМАНДЫ БЕЗУСЛОВНОГО ПЕРЕХОДА (БП)
  6. КОМАНДЫ ВВОДА-ВЫВОДА В ПОРТЫ
  7. Команды ветвления.
  8. Команды логических операций
  9. Команды логического сдвига
  10. Команды общего назначения
  11. Команды операций с битами

Команды управления контролем передачи данных, которыми обмениваются ‘Интерпретатор протокола сервера’ и ‘Интерпретатор протокола пользователя’, можно разделить на три большие группы:

Команды управления доступом к системе.

Команды управления потоком данных.

Рассмотрим несколько наиболее характерных команд из каждой группы. Среди команд управления доступом к системе следует отметить следующие:

USER. Как правило, эта команда открывает сессию FTP между клиентом и сервером. Аргументом команды является имя (идентификатор) пользователя для работы с файловой системой. Эта команда может подаваться не только в начале, но и в середине сессии, если, например, пользователь желает изменить идентификатор, от имени которого будут проводиться действия. При этом все переменные, относящиеся к старому идентификатору, освобождаются. Если во время изменения идентификатора происходит обмен данными, обмен завершается со старым идентификатором пользователя.

PASS. Данная команда подается после ввода идентификатора пользователя и, в качестве аргумента содержит пароль пользователя. Напомним, что данные аутентификации FTP передаются по сети открытым текстом, поэтому для обеспечения защищенности канала пользователю необходимо предпринимать дополнительные меры.

CWD. Команда позволяет пользователям работать с различными каталогами удаленной файловой системы. Аргументом команды является строка, указывающая путь каталога удаленной файловой системы, в котором желает работать пользователь.

REIN. Команда реинициализации. Эта команда очищает все переменные текущего пользователя, сбрасывает параметры соединения. Если в момент подачи команды происходит передача данных, передача продолжается и завершается с прежними параметрами.

QUIT. Команда закрывает управляющий канал. Если в момент подачи команды происходит передача данных, канал закрывается после окончания передачи данных.

Команды управления потоком устанавливают параметры передачи данных. Все параметры, описываемые этими командами, имеют значение по умолчанию, поэтому команды управления потоком используются только тогда, когда необходимо изменить значение параметров передачи, используемых по умолчанию. Команды управления потоком могут подаваться в любом порядке, но все они должны предшествовать командам FTP-сервиса. Из команд управления потоком данных следует выделить следующие:

PORT. Команда назначает адрес и порт хоста, который будет использоваться как активный участник соединения по каналу передачи данных. Аргументами команды являются 32-битный IP адрес и 16-битный номер порта соединения. Эти значения разбиты на шесть 8-битных полей и представлены в десятичном виде: h1, h2, h3, h4, p1, p2, где hN — байты адреса (от старшего к младшему), а pN — байты порта (от старшего к младшему).

PASV. Эта команда отправляется модулю, который будет играть пассивную роль в передаче данных (‘слушать’ соединение). Ответом на данную команду должна быть строка, содержащая адрес и порт хоста, находящиеся в режиме ожидания соединения в формате команды PORT — ‘h1, h2, h3, h4, p1, p2’.

Команды TYPE, STRU, MODE определяют, соответственно, тип передаваемых данных (ASCII, Image и другие), структуру или формат передачи данных (File, Record, Page), способ передачи (Stream, Block и другие). Использование этих команд очень важно при построении взаимодействия в гетерогенных средах и весьма отличающихся операционных и файловых систем взаимодействующих хостов.

Команды FTP-сервиса определяют действия, которые необходимо произвести с указанными файлами. Как правило, аргументом команд этой группы является путь к файлу. Синтаксис указанного пути должен удовлетворять требованиям формата файловой системы обработчика команды. Из команд FTP-сервиса можно выделить следующие:

RETR. Эта команда указывает модулю ‘Программа передачи данных сервера’ передать копию файла, заданного параметром этой команды, модулю передачи данных на другом конце соединения.

STOR. Команда указывает модулю ‘Программа передачи данных сервера’ принять данные по каналу передачи данных и сохранить их как файл, имя которого задано параметром этой команды. Если такой файл уже существует, он будет замещен новым, если нет, будет создан новый.

Команды RNFR и RNTO должны следовать одна за другой. Первая команда содержит в качестве аргумента старое имя файла, вторая — новое. Последовательное применение этих команд переименовывает файл.

ABOR. Команда предписывает серверу прервать выполнение предшествующей сервисной команды (например, передачу файла) и закрыть канал передачи данных.

Команда DELE удаляет указанный файл.

Команды MKD и RMD, соответственно, создают и удаляют указанный в аргументе каталог.

При помощи команд LIST и NLST можно получить список файлов в указанном каталоге.

Все команды FTP-протокола отправляются ‘Интерпретатором протокола пользователя’ в текстовом виде — по одной команде в строке. Каждая строка команды — идентификатор и аргументы — заканчиваются символами . Имя команды отделяется от аргумента символом пробела — .

Обработчик команд возвращает код обработки каждой команды, состоящий из трех цифр. Коды обработки составляют определенную иерархическую структуру и, как правило, определенная команда может возвратить только определенный набор кодов. За кодом обработки команды следует символ пробела — , затем следует текст пояснения. Например, строка успешного завершения операции выглядит следующим образом: ‘200 Command okay.

Ниже приведен пример работы с FTP-протокола. Обозначения: S — сервер, U — пользователь.

S: 220 Service ready for new user

> S: 331 User name okay, need password

S: 230 User logged in, proceed

S: 150 File status okay; about to open data connection

S: 226 Closing data connection, file transfer successful

S: 200 Command okay

U: STOR /home/images/first.my

S: 550 Access denied

Команды и отклики передаются по управляющему соединению между клиентом и сервером в формате NVT ASCII. В конце каждой строки команды или отклика присутствует пара CR, LF.

Единственные команды Telnet (начинающиеся с IAC), которые могут быть отправлены клиентом серверу — это команда прерывания процесса ( ) и Telnet сигнал синхронизации ( в режиме срочности). Мы увидим, что эти две команды Telnet используются для прекращения передачи файла или для того, чтобы отправить серверу запрос в процессе передачи. Если сервер получает от клиента команду с Telnet опцией (WILL, WONT, DO или DONT), он отвечает либо DONT, либо WONT.

Команды состоят из 3 или 4 байт, а именно из заглавных ASCII символов, некоторые с необязательными аргументами. Клиент может отправить серверу более чем 30 различных FTP команд. В таблице 5.1 показаны некоторые наиболее широко используемые команды, большинство из которых мы рассмотрим в этой главе.

Распространенные FTP команды.

Команда Описание
ABOR прервать предыдущую команду FTP и любую передачу данных
LIST список файлов список файлов или директорий
PASS пароль пароль на сервере
PORT n1,n2,n3,n4,n5,n6 IP адрес клиента (n1.n2.n3.n4) и порт (n5 x 256 + n6)
QUIT закрыть бюджет на сервере
RETR имя файла получить (get) файл
STOR имя файла положить (put) файл
SYST сервер возвращает тип системы
TYPE тип указать тип файла: A для ASCII, I для двоичного
USER имя пользователя имя пользователя на сервере

В примерах мы увидим, что некоторые команды полностью совпадают с тем, что вводит интерактивный пользователь в качестве FTP команд. В этом случае они передаются по управляющему соединению, однако некоторые вводимые пользователем команды генерируют несколько FTP команд, которые, которые в свою очередь, передаются по управляющему соединению.

Дата добавления: 2014-01-07 ; Просмотров: 2085 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Интернет технологии (архив 2001-2010)

Служба FTP (от протокола — File Transfer Protocol) — предназначена для обмена файлами.

FTP служба построена по хорошо известной схеме «клиент-сервер».

Клиент (браузер,Windows Commander, NetVampir . ) посылает запросы серверу и принимает файлы.

Сервер FTP (vsftpd, IIS . ) обрабатывает запросы клиента на получение файла.

Взаимодействие клиент и сервера по протоколу FTP.

Служба FTP базируется на двух стандартах:

URL (Universal Resource Locator) — универсальный способ адресации ресурсов в сети ;

FTP (File Transfer Protocol) — протокол передачи файлов.

File Transfer Protocol — протокол передачи файлов, протокол высокого уровня (а именно, уровня приложений).
. Используется службой FTP для передачи файлов.

Первый стандарт — RFC114 (File Transfer Protocol A.K. Bhushan Apr-10-1971).

Последняя версия — RFC959 (File Transfer Protocol J. Postel, J.K. Reynolds Oct-01-1985).

FTP отличается от других приложений тем, что он использует два TCP соединения для передачи файла.

Управляющее соединение — соединение для посылки команд серверу и получение ответов от него. Для канала управления используется протокол Telnet.

Соединение данных — соединение для передачи файлов.

Схема двух каналов соединения по протоколу FTP

В старых версиях для передачи данных использовался только 20-й порт (активный режим), в современных версиях FTP-серверов порт для канала данных может назначаться сервером из нестандартных (N > 1024) портов (пассивный режим).

Протокол FTP определяет запрос-ответный способ взаимодействия между программой-клиентом и программой-сервером.

Работа FTP на пользовательском уровне содержит несколько этапов:

Идентификация (ввод имени и пароля).

Определение режима обмена (поблочный, поточный, ascii или двоичный).

Выполнение команд обмена (get, mget, dir, mdel, mput или put).

Завершение процедуры (quit или close).

5.2.1 Различие работы пассивного режима и активного.

5.2.1.1 Активный режим

Действия сервера и клиента:

Клиент устанавливает связь и посылает запрос на 21 порт сервера с порта N (N>1024)

Сервер посылает ответ на порт N (N>1024) клиента

Сервер устанавливает связь для передачи данных по порту 20 на порт клиента N+1

5.2.1.2 Пассивный режим:

Действия сервера и клиента:

Клиент устанавливает связь и посылает запрос (сообщает, что надо работать в пассивном режиме) на 21 порт сервера с порта N (N>1024)

Сервер посылает ответ и сообщает номер порта для канала данных P (P>1024) на порт N (N>1024) клиента

Клиент устанавливает связь для передачи данных по порту N+1 на порт сервера P (P>1024)

Активный FTP выгоден для FTP-сервера, но вреден для стороны клиента. FTP сервер пытается соединиться со случайными высокими (по номеру) портами на клиенте, такое соединение наверняка будет блокировано брандмауэром на стороне клиента.

Пассивный FTP выгоден для клиента, но вреден для FTP-сервера. Клиент будет делать оба соединения к серверу, но одино из них будет к случайному высокому порту, такое соединение наверняка будет блокировано брандмауэром на стороне сервера.

Ниже приведены примеры запроса клиента и ответа сервера:

5.2.1.3.1 Пример запроса на чтение каталога

Установка соединения
Connecting to ftp.ru .
Connected to ftp.ru [194.87.5.52]

сервер: 220 megillah.demos.su FTP server (Version wu-2.4) ready. — // код ошибки, имя хоста, протокол, версия сервера, только для чтения
клиент: USER anonymous // имя пользователя
сервер: 331 Guest login ok, send your complete e-mail address as password. //код ошибки, имя пользователя корректно, нужен пароль
клиент: PASS ****** // пароль клиента
сервер: 230 Guest login ok, access restrictions apply. //код ошибки, пользователь идентифицирован, продолжайте
клиент: CWD / // переход к корневой директории
сервер: 250 CWD command successful. // команда выполнена успешно
клиент: TYPE A // передавать информацию в текстовом виде
сервер: 200 Type set to A. // текстовый тип установлен
клиент: PASV // сервер должен определить нестандартный порт данных, начать его слушать
сервер: 227 Entering Passive Mode (194,87,5,52,9,75) // сервер возвращает ip-адрес (194.87.5.52) и номер порта (2383)
клиент: LIST // передать по соединению данных список имен файлов в директории
сервер: Data connection established // установлено соединение данных
клиент: 150 Opening ASCII mode data connection for /bin/ls. // татус файла правилен, подготавливается открытие канала

Передача информации по каналу данных
сообщение: Data transfer started // начало передачи информации
сообщение: DATA connection closed by remote server // закрытие канала передачи данных

Информирование клиентом пользователя
сообщение: Received 1 428 bytes in 0:00:00 (35 700 bytes/s) // сколько байт получено (1 428), за какое время (ч.мм.сс) и с какой средней скоростью (35 700 bytes/s)
сообщение: JOB COMPLETED SUCCESSFULLY // работа завершена

5.2.1.3.2 Пример запроса файла

Установка соединения
Connecting to ftp.ru .
Connected to ftp.ru [194.87.5.52]

сервер: 220 megillah.demos.su FTP server (Version wu-2.4) ready. // код ошибки, имя хоста, протокол, версия сервера, только для чтения
клиент: USER anonymous // имя пользователя
сервер: 331 Guest login ok, send your complete e-mail address as password. // имя пользователя корректно, нужен пароль
клиент: PASS ****** // пароль клиента
сервер: 230 Guest login ok, access restrictions apply. // пользователь идентифицирован, продолжайте
клиент: CWD /www.FAQ.win // сменить каталог на /www.FAQ.win
сервер: 550 /www.FAQ.win: Not a directory. // директория /www.FAQ.win не найдена
клиент: TYPE I // передавать файл в бинарном виде
сервер: 200 Type set to I. // бинарный тип установлен
клиент: STAT /www.FAQ.win // запрос информации о файле /www.FAQ.win
сервер: 211-status of /www.FAQ.win: // начало передачи информации
сервер: -rw-r—r— 1 root root 31368 Jan 18 1999 /www.FAQ.win // продолжение передачи информации
сервер: 211 End of Status // конец передачи информации
клиент: PASV // сервер должен определить нестандартный порт данных, начать его слушать
сервер: 227 Entering Passive Mode (194,87,5,52,9,79) // сервер возвращает ip-адрес (194.87.5.52) и номер порта (2383)
клиент: REST 64 // начать докачку файла, пропустив первые 64 байта
сервер: Data connection established // установлено соединение данных
сервер: 350 Restarting at 64. (null) // команда принята
клиент: REST 0 // начать докачку файла, пропустив первые 0 байтов
сервер: 350 Restarting at 0. (null) // команда принята
клиент: RETR /www.FAQ.win // выдать файл www.FAQ.win
сервер: 150 Opening BINARY mode data connection for /www.FAQ.win (31368 bytes). // статус файла правилен, подготавливается открытие канала данных, размер файла 31 368 байт

Передача информации по каналу данных
сообщение: Data transfer started // начало передачи файла
сообщение: DATA connection closed by remote server // закрытие канала передачи данных

Информирование клиентом пользователя
сообщение: Received 31 368 bytes in 0:00:02 (10 477 bytes/s) // сколько байт получено (31 368), за какое время (ч.мм.сс) и с какой средней скоростью (10 477 bytes/s)
сообщение: JOB COMPLETED SUCCESSFULLY // работа завершена

5.2.1.4 Некоторые команды

управления доступом
USER — имя пользователя
PASS — пароль
CWD — имя новой рабочей директории
CDUP — перейти на один уровень директории вверх
QUIT — выход

установки параметров передачи
PORT ip1,ip2,ip3,ip4,p1,p2 — IP адрес клиента (ip1,ip2,ip3,ip4) и порт (p1,p2) (расчет порта p1*256+p2=номер порта)
Пример:
Entering Passive Mode (194,87,5,52,9,79)
194.87.5.52 — IP адрес
2383 — номер порт, расчет порта 9*256+79=2383
PASV — сервер должен определить нестандартный порт данных, начать его слушать и вернуть ip-адрес и номер порта в формате PORT
TYPE < < A | E >[ N | T | C ] > | I | L размер-байта (по умолчанию — A N) — специфицирует тип информации

действия
RETR — имя файла (взять файл)
STOR — имя файла (передать файл)
REST — маркер (для докачки уже частично скаченного файла — обычно указывается смещение в байтах)
DELE — имя удаляемого файла
RMD — имя удаляемой директории
MKD — имя создаваемой директории
PWD — в ответе указать имя текущей директории
LIST [имя директории или файла] — передать по соединению данных список имен файлов в директории или информацию о файле
SYST — ответ должен содержать тип ОС сервера и др. полезную информацию
STAT — ответ содержать информацию о текущем состоянии сервера; если команда выдана в процессе передачи файла и предварена посылкой сигналов telnet-а IP и Synch, то ответ д. содержать информацию о состоянии пересылки
STAT имя файла — ответ должен содержать информацию о файле

прочее
HELP [имя команды] — описание работы данной команды
NOOP — пустая команда

5.2.1.5 Некоторые типы данных:

ASCII (TYPE A ) — передача текстовой информации

IMAGE (TYPE I ) — передача бинарных файлов

5.2.1.6 Коды возврата

При выполнении FTP система возвращает трехразрядные десятичные коды-ошибки, которые позволяют судить о корректности обмена. Выдача кода сопровождается текстом-комментарием. Первая цифра может принимать значения от 1 до 5.

Первая цифра:
1yz — предварительный положительный ответ: команда принята, но не завершена
2yz — действие успешно завершено
3yz — команда принята, сервер ждет дополнительную информацию
4yz — временная неудача, повторить через некоторое время
5yz — фатальная ошибка

Вторая цифра:
x0z — синтаксис
x1z — ответ на запрос информации
x2z — ответ относится к состоянию управляющего соединения или соединения данных
x3z — аутентификация и учет
x4z — смысл не определен
x5z — состояние файловой системы сервера

5.2.1.6 Некоторые коды возврата

120 Функция будет реализована через nnn минут

125 Канал открыт, обмен данными начат

150 Статус файла правилен, подготавливается открытие канала

200 Команда корректна

211 Системный статус или отклик на справочный запрос

212 Состояние каталога

213 Состояние файла

214 Справочное поясняющее сообщение

220 Слишком много подключений к FTP-серверу (можете попробовать позднее). В некоторых версиях указывает на успешное завершение промежуточной процедуры

221 Благополучное завершение по команде quit

225 Канал сформирован, но информационный обмен отсутствует

226 Закрытие канала, обмен завершен успешно

230 Пользователь идентифицирован, продолжайте

250 Запрос прошел успешно

331 Имя пользователя корректно, нужен пароль

332 Для входа в систему необходима аутентификация

421 Процедура не возможна, канал закрывается

425 Открытие информационного канала не возможно

426 Канал закрыт, обмен прерван

450 Запрошенная функция не реализована, файл не доступен, например, занят

451 Локальная ошибка, операция прервана

452 Ошибка при записи файла (не достаточно места)

500 Синтаксическая ошибка, команда не может быть интерпретирована (возможно, она слишком длинна)

501 Синтаксическая ошибка (неверный параметр или аргумент)

502 Команда не используется (нелегальный тип MODE)

503 Неудачная последовательность команд

504 Команда не применима для такого параметра

530 Система не загружена (not logged in)

532 Необходима аутентификация для запоминания файла

550 Запрошенная функция не реализована, файл не доступен, например, не найден

552 Запрошенная операция прервана, недостаточно выделено памяти

5.2.1.7 Соединение к FTP с помощью Telnet

Подсоединимся к командному порту FTP (21):

>telnet ipm.kstu.ru 21

TFTP — тоже протокол FTP, но поверх протокола UDP (т.е. протокол без гарантированной доставки). Может использоваться в локальной сети, где скорость передачи важнее. На практике используется редко.

5.4 Программы клиенты

FTP — программа запускается с командной строки.

Windows Comander — может работать как FTP-клиент. Позволяет работать с удаленными каталогами также как с локальными.

NetVampire — Специализированный FTP-клиент, который позволяет качать большие файлы и качать по плохим каналам.

FTP-протокол + WinSocks на примере простого FTP-клиента (зеркала) на ASM!

Это еще одна статья «давно гуляющая» по интернету, и опять, как автор, сделаю перепост. Думаю пригодиться и тут.

Введение

В этой статье я не ставлю себе целью пересказать все RFC касающиеся протокола FTP, коих не мало, в них вы сможете найти информацию гораздо полнее, попытаюсь лишь в общих чертах познакомить Вас с протоколом FTP и основными приемами работы с ним со стороны клиента.

Общие сведения о протоколе FTP

Итак, FTP (File Transfer Protocol) – протокол передачи файлов в сетях стандарта TCP/IP. Этот протокол был специально создан для облегчения и стандартизации программирования алгоритмов передачи файлов между клиентом и сервером. Как и все протоколы высокого уровня, он не занимается непосредственной передачей данных (этим занимается протокол более низкого уровня – TCP, а так же протоколы ниже), а лишь описывает способ «общения» клиент-сервер.

Перейдем непосредственно к описанию протокола. Отличительной его особенностью является использование двух соединений между сервером и клиентом. Одно соединение (командное или управляющее) используется для передачи команд серверу, а так же приема ответов на эти команды. Второе соединение (соединение данных) используется непосредственно для приема или передачи данных. Управляющее соединение всегда происходит со стороны клиента на порт сервера 21 и остается на протяжении всего сеанса работы открытым. Соединение данных открывается и закрывается по мере необходимости в приеме или получении данных.

После того как установлено управляющее соединение клиент может отправлять по нему серверу различные команды. Каждая команда представляет из себя 3 или 4 заглавных символа ASCII, за которыми после одного или более пробелов следуют, в некоторых командах не обязательные аргументы. Любая команда заканчивается парой CR, LF – это, несомненно, известные всем 0dh, 0ah – если речь идет о DOS/Windows. В общих чертах схема команды такая:

Команда [аргумент(ы)] CR, LF.

Всего существует чуть более 30 команд (в RFC959 – 33) которые могут быть посланы серверу, но это совсем не значит что сервер все их будет поддерживать. Приведу пример наиболее часто используемых команд.

USER имя пользователя
Указывает имя пользователя

PASS пароль
Указывает пароль пользователя

LIST список файлов
Запрос списка файлов

PORT n1,n2,n3,n4,n5,n6
Указание IP и порта для соединения данных

RETR имя файла
Получить файл с сервера

STOR имя файла
Положить файл на сервер

TYPE тип
Тип передаваемых данных

QUIT
Отключение от сервера

ABOR
Отмена предыдущее команды. Прекращение передачи данных.

При получении запроса сервер, по тому же управляющему соединению отправляет ответ на него. Ответ сервера состоит из трех символов (цифр) в формате ASCII, за которыми следует не обязательный текст, обычно поясняющий цифирный код ответа, за этим пояснением следуют неизменные CR, LF. Ответ например может быть таким: 226 File send OK. – в этом примере сервер сообщает нам о том, что файл отправлен с его стороны (что совсем не означает, что он уже получен со стороны клиента). Первая цифра отклика сервера наиболее значимая, и дает однозначное представление о том как выполнилась (или не выполнилась) команда. Значения могут быть такими:

  • 1хх Команда находится в процессе выполнения, необходимо дождаться еще одного сообщения перед тем, как давать следующую команду.
  • 2хх Команда выполнена. Сервер находится в ожидании следующей.
  • 3хх Команда выполнена, но для продолжения необходима еще одна команда
  • 4хх Команда не была выполнена, необходимо подождать и повторить команду
  • 5хх Команда не была выполнена и не будет выполнена при повторе.

По второй цифре отклика можно судить о том, какая ситуация привела к возникновению отклика:

  • x0x Ошибка синтаксиса.
  • x1x Информация.
  • x2x Отклик относится к состоянию управляющего или соединению данных.
  • x3x Отклик относится к аутентификации пользователя или состоянию бюджета.
  • x4x Не определенно.
  • x5x Отклик относится к состоянию файловой системы.

Ну и наконец третья цифра отклика несет в себе дополнительную информацию.

Следует обратить особое внимание на то, что хотя на большую часть команд сервер отвечает одним откликом, есть и широко используются команды, в ответ на которые сервер генерирует несколько откликов. При этом первая цифра первого отклика будет «1» — т.е. если взглянуть на таблицы выше, сервер сообщает нам о том, что необходимо подождать еще одного сообщения от него, перед тем, как посылать следующую команду. Примером такой команды может служить команда RETR, когда сервер принимает ее и начинает пересылку данных он отвечает нам что-то вроде: «150 Opening BINARY mode data connection for HIDE.ASM (958 bytes).» — смысл сообщения сводится к «начата передача данных». Затем, когда данные им уже будут отправлены (но опять хочу заострить внимание – не факт, что получены клиентом) он отправит по управляющему соединению еще один отклик – «226 File send OK.» — т.е. «файл отправлен». Вот в этом случае только после получения второго сообщения сервер готов к выполнению следующей команды. Вместо последнего сообщения мы вполне можем получить сообщение с ошибкой начинающееся с «4» — в том случае, если возникнут какие-либо проблемы с передачей файла.

В общих чертах это все, что касается управляющего соединения.

Теперь поговорим о соединении данных. Как уже говорилось выше, соединение данных организуется по мере необходимости, и закрывается каждый раз после передачи или приема данных. Так происходит потому, что режим передачи данных между клиентом и сервером – потоковый, а в таком режиме окончание передачи данных – закрытие соединения. Из вышесказанного мы должны сделать один немаловажный вывод – судить об окончании передачи данных со стороны сервера мы можем по закрытию соединения.

Обычно соединение данных открывается следующим образом:

  • клиент выбирает свободный порт на своем хосте и осуществляет пассивное открытие на него;
  • клиент сообщает серверу по управляющему соединению свой IP-адрес и номер порта, на который сделал пассивное открытие;
  • сервер, получив порт и IP-адрес осуществляет его активное открытие;
  • передаются или принимаются данные;
  • в зависимости от того кто передает, а кто принимает данные осуществляется закрытие порта.

Небольшое отступление: если вы внимательно прочтете второй пункт, может возникнуть вопрос – «А что будет если мы передадим серверу фиктивный адрес и порт?». Ответ неоднозначен, сервер может проверять IP-адрес, но это происходит не всегда, поэтому существуют некоторые интересные «заморочки» с использованием фиктивных адресов.

Что касается порта, выбираемого для соединения данных клиентом. Обычно используется динамически назначаемый ОС порт, — т.е. делается запрос к системе, она дает первый свободный. Если клиент не указывает серверу порт для соединения, оно происходит на порт с которого было проведено управляющее соединение (поступать так не рекомендуется). Сервер всегда осуществляет соединение данных с 20-го порта.

Это все основное, что я хотел рассказать о соединении данных.

Теперь, когда мы знаем для чего и как работают оба соединения, хочу отметить еще один момент (при первом прочтении можно пропустить). Команда LIST возвращает список файлов текущей директории, и возвращает его по соединению данных. Список представляет из себя набор строк ASCII оканчивающихся символами CR, LF. Каждая строка несет в себе информацию об одном из элементов запрашиваемого каталога. Общий шаблон этой строки такой:

Txxxxxxxxx[ ]uk[ ]user[ ]group[ ]size[ ]mm[ ]dd[ ]yytt[ ]name CR, LF

T – тип элемента («d» — каталог, «-» — файл, «l» — ссылка и т.д.);
xxxxxxxxx – атрибуты защиты файла;
user – пользователь, владелец файла;
group – группа владельца;
size — размер элемента;
mm – месяц создания элемента в текстовом виде, например «jul»;
dd – день месяца создания элемента;
yytt – здесь может быть год или время создания элемента;
name – имя элемента (файла, каталога, ссылки);
[ ] – один или более пробелов.

Да, между этими элементами может быть различное количество пробелов, надо сказать спасибо, что в различных реализациях серверов оставили одно количество значимых столбцов, поэтому при анализе таблицы файлов следует это учитывать. Стоит еще учесть такую вещь, что не всегда первая строка из таблицы есть значимая строка, несущая информацию о первом элементе каталога. В некоторых реализациях FTP-серверов (например ftpd на FreeBSD), первой строкой списка является строка «total NN».

Как это должно работать?

Давайте немного отвлечемся и посмотрим, как же должен выглядеть FTP сеанс получения файла «изнутри». Итак, мы запускаем клиента. Сервер в это время уже пассивно открыл и слушает 21-ый порт. В первую очередь нам необходимо создать управляющее соединение – конектимся на сервер на порт 21. Что дальше? Сразу, как только мы удачно законектились с сервером по созданному управляющему соединению нам приходит приветствие от сервера, это будет что-то вроде «220 VSFTP deamon base on Alt Linux 2.2, Shpakovsky».

Следующим шагом должна быть регистрация – допустим мы соединяемся с анонимным сервером — по управляющему соединению клиент посылает серверу команду USER anonymous, на что, если сервер поддерживает анонимного пользователя получаем ответ: «331 Please specify the password.» — «пожалуйста сообщите пароль», заметим цифру «3» в ответе сервера, что означает, что для продолжения требуется еще команда, что собственно и делает клиент – посылаем команду PASS 1@1 – в качестве пароля указав фиктивный e-mail. На что получаем ответ сервера «230 Login successful. Have fun.» — «Регистрация прошла успешно».

Все, теперь наши действия зависят от того что мы хотим, а как говорилось выше, хотим мы получить с сервера файл, пусть к примеру это будет файл «H >
Итак, осталось только получить файл. Для этого клиенту необходимо открыть соединение данных. Клиентом выбирается свободный порт, осуществляется пассивное открытие, т.е. клиент его «слушает». Дальше клиенту нужно сообщить серверу свой IP-адрес и номер порта, который только что пассивно открыл (допусти IP-адрес хоста клиента будет 10.21.23.10, а номер порта 2000). Клиент посылает серверу по управляющему соединению команду PORT 10,21,23,10,7,208 – «что за 7,208?» — спросите вы. Это и есть номер порта строится он так – 7*256+208 = 2000. Сервер после получения этой команды попытается сделать активное открытие указанного порта и в случае удачи вернет что-то вроде «200 PORT command successful. Consider using PASV.».

Все, соединение данных установлено остается дать команду передачи данных серверу, что и делает клиент — RETR HIDE.EXE, на что в случае если все нормально (файл существует и может быть передан) сервер отвечает «150 Opening BINARY mode data connection for HIDE.EXE (4096 bytes).» и начинает сливать файл по соединению данных. Опять обращаю ваше внимание на первую цифру ответа. Когда файл будет полностью отправлен сервер пошлет сообщение «226 File send OK.» и произведет закрытие соединения данных.

Клиент ждет окончания получения данных со своей стороны (о чем свидетельствует получение сообщения от сервера + закрытие соединения данных, тут есть ньюансы, но о них позже) после чего закрывает порт соединения данных со своей стороны.

Итак файл получен клиентом, остается разорвать управляющее соединение, клиент посылает команду QUIT, сервер отвечает «221 Goodbye.» и разрывает соединение.

Вот собственно самое важные теоретические сведения о протоколе. Перед тем как переходить к практике очень советую побаловаться управляющим соединением с FTP-сервером, используя telnet, соединение данных создать не получится, но команды и ответы на них будут на виду. Так же рекомендую поработать с каким-либо консольным клиентом FTP и понаблюдать во время всего этого за созданием и закрытием соединений с помощью какой-нибудь утилиты для этого, коих в Интернете как грязи.

Реализация.

Теперь о самой реализации. В этой реализации клиента я использую non-blocking (не блокирующие) сокеты, поэтому модель клиента – событийная, т.е. выполнять те или иные действия, касающиеся используемых клиентом сокетов клиент будет только при возникновении соответствующего события (например закрытие соединения, уведомление о получении данных и т.д.). В качестве событий используются сообщения, приходящие в процедуру главного окна. Кроме того, модель программы поточная, используется поток для чтения соединения данных и поток для чтения управляющего соединения, а так же основной поток клиента, запускающийся при нажатии на кнопку «соединение». Так как программа многопоточная для синхронизации работы этих трех потоков (а так же процедуры сообщений главного окна) используются «event’s» («события», не путать эти события, используемые программой как датчик 1 или 0 – произошло или не произошло событие, и события касающиеся сокетов, которые приходят на процедуру главного окна).

Итак, начнем. При создании основного окна приложения мы проводим основную инициализацию программы, поясню основные моменты:

call VirtualAlloc,ebx,1024000,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE
mov ReciveDataBufferOffset,eax
call VirtualAlloc,ebx,10240,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE
mov ReciveCommandBufferOffset,eax
Здесь выделяется память под буфер приема файла (1 Мб) и под буфер команд (10 Кб).

call CreateEventA,ebx,ebx,ebx,ebx
mov HDataReciveEvent,eax
……
Создаются объекты event (события) более подробно о назначении событий позже.

call CreateThread,ebx,ebx,offset ReciveThread,offset ReciveDataThreadStruc, \
NORMAL_PRIORITY_CLASS,offset ThreadID_data
call CreateThread,ebx,ebx,offset ReciveThread,offset ReciveCommandThreadStruc,\
NORMAL_PRIORITY_CLASS,offset ThreadID_command
Создаются 2 потока – один для чтения данных, другой для чтения управляющего потока. Оба этих потока при старте находятся в приостановленном состоянии, и начинают работать только при установлении соответствующего события.

call gethostname, offset HostName,64
call gethostbyname,offset HostName
…..
mov PortInPort,esi
ret 0

Смысл строк выше в получении IP-адреса нашего хоста, небольшом преобразовании и записи его в отдельное место, адрес хоста нам потребуется для выполнения команды PORT.

На этом процесс начальной инициализации заканчивается, и программа находится в состоянии ожидания команды пользователя. Давайте посмотрим что происходит при нажатии пользователем кнопки «соединиться».

В основной процедуре окна создается главный поток приложения, рассмотрим его ключевые моменты.

Сразу при старте мы инициализируем переменные относящиеся к приему данных и получаем из окна диалога введенные пользователям параметры соединения (сервер, пароль и.д.). После этого нам необходимо создать управляющее соединение с сервером, что мы и делаем:

— создаем сокет;
call socket, AF_INET, SOCK_STREAM, IPPROTO_TCP
mov ReciveCommandSock,eax
— выбираем неблокирующий режим для сокета, указываем что хотим получать
сообщения о получении новых данных на сокет, а так же о успешном его
приконекчивании.
call WSAAsyncSelect, ReciveCommandSock, newhwnd, WM_COMMANDSOCK,FD_READ+FD_CONNECT
— получаем информацию об удаленном хосте и конектимся к нему
…..
call connect,ReciveCommandSock,offset sockaddr_in,16
— ждем получения события FD_CONNECT, когда оно приходит в процедуру главного окна
обработчик с помощью call SetEvent,HWaitConnectEvent устанавливает событие,
чего мы и ожидаем в следующей строке, если событие не будет установлено в течении
5 секунд, выводим сообщение об ошибке и заканчиваем сеанс связи.
call WaitForSingleObject,HWaitConnectEvent,5000
call ResetEvent,HWaitConnectEvent
— так как после соединения сервер должен послать нам приветствие, ждем его еще 5
секунд, если оно не поступило — выходим. Процедура WaitAnswerRecive описана ниже.
call WaitAnswerRecive,5000
or eax,eax
jnz errorwithregisration

— входным параметром к функции является интервал, в течении которого, функция будет
ждать ответа сервера, если за указанный интервал ответ не будет получен, функция
выводит сообщение об ошибке и завершается с ненулевым значением регистра eax.

WaitAnswerRecive proc TimeToWait:dword
call WaitForSingleObject,HWaitCommandEvent,TimeToWait
— ожидаем возникновение события HWaitCommandEvent, которое устанавливается в потоке
получения данных по управляющему соединению, в случае успешного получения данных.
or eax,eax
jz NoTimeOutGet
call MessageBoxA,newhwnd,offset ErrTimeOutCommand,offset ErrorCap,40h
call ResetEvent,HWaitCommandEvent
— сбросили событие HWaitCommandEvent т.к. истек таймаут, и событие осталось в
сигнальном состоянии.
NoTimeOutGet:
ret
WaitAnswerRecive endp

Теперь пришло время рассмотреть потоки получения данных, как говорилось выше эти потоки создаются в процессе инициализации главного окна, и находятся постоянно в процессе ожидания новых данных, потоки активизируются в процедуре главного окна при получении ей сообщении о том, что есть новые данные, сообщение для управляющего соединения мы определили в самом начале главного потока функцией WSAAsyncSelect, сообщение для соединения данных определяется при создании этого соединения, как мы увидим позже.

Универсальный трэд для получения данных по управляющему и соединению данных приведен ниже.

— в качестве параметра поток получает адрес структуры ReciveDataThreadStruc
или ReciveCommandThreadStruc в зависимости от предназначения трэда.
Структура для ReciveCommandThreadStruc такая:
— хэндл события по которому трэд активизируется;
HCommandReciveEvent dd ?
— хэндл события, которое устанавливает трэд если все данные успешно получены;
HWaitCommandEvent dd ?
— адрес буфера получения данных;
ReciveCommandBufferOffset dd ?
— здесь содержится общее количество полученных данных;
BytesCommandRecived dd 0
— и наконец, с какого сокета надо получить данные;
ReciveCommandSock dd ?

ReciveThread proc parametr:dword
mov edi,parametr
InfinityLoop:
— ждем возникновения события, что данные можно принимать;
call WaitForSingleObject,dword ptr [edi],-1
— настраиваем esi на место, куда данные будут считаны — адрес буфера+количество
полученных ранее;
mov esi,[edi+8]
add esi,[edi+12]
— получаем не более 4096 байт;
call recv,dword ptr [edi+16],esi,4096,0
— прибавляем к уже полученным ранее, полученные в данный момент;
add [edi+12],eax
— в ebx заносим хэндл события, которое надо установить, если получены все нужные данные;
mov ebx,[edi+4]
— если мы получаем данные по соединению данных то идем к проверке конца получения
данных по соединению данных, иначе — проверяем получили ли мы все данные по
управляющему соединению;
cmp edi,offset ReciveDataThreadStruc
je comparefordata
— по управляющему соединению получены все данные в случае если последние байты ответа
0dh, 0ah, что мы и проверяем;
mov eax,[edi+12]
mov esi,[edi+8]
cmp byte ptr [esi+eax-1],10
je short CallEvent
jmp InfinityLoop
comparefordata:
— по соединению данных получено все, если количество полученных байт = длине файла;
mov eax,[edi+12]
cmp FileLenght,eax
jne InfinityLoop
CallEvent:
— в случае если все данные получены выставляем соответствующее событие;
call SetEvent,ebx
jmp InfinityLoop
ReciveThread endp

Вернемся теперь к основному потоку, мы успешно получили ответ от сервера, в том что он готов к приему команд, теперь мы можем передавать ему команды, в данной реализации за отправку команд серверу отвечает функция SendCommandInSocket, в основном потоке далее мы вызываем эту функцию для отправки серверу последовательно команд: USER, PASS, TYPE, CWD, PORT и LIST. Сама функция выглядит так:

— принимает аргументами сокет, в который нужно передать команду, и смещение на буфер,
в котором содержится команда;
SendCommandInSocket proc uses ebx ecx esi edi, hSocket:dword, OutBufOffset:dword
— сначала определяем длину команды;
mov edi,OutBufOffset
push edi
mov eax,0ah
mov ecx,100
repne scasb
sub edi,OutBufOffset
mov ecx,edi
pop esi
push edi
— переносим команду в буфер для приема ответов для сервера, сделано это для того,
что бы потом его можно было сохранить в удобочитаемом виде лога;
mov edi,ReciveCommandBufferOffset
add edi,BytesCommandRecived
rep movsb
pop edi
add BytesCommandRecived,edi
— посылаем команду в сокет;
call send,hSocket,OutBufOffset,edi,ebx
— ждем ответа сервера, с помощью уже описанной выше функции WaitAnswerRecive;
mov eax,5001
Wait2Answer:
dec eax
push eax
call WaitAnswerRecive
or eax,eax
jnz ErrorProcessed
— ответ получен, ищем первый байт ответа, мы его ИЩЕМ, а не просто используем
смещение на конец предпоследнего полученого сообщения, потому, что нами может
быть получено в одном сеансе получения данных обновременно два ответа от сервера.
Уясните себе этот момент.
mov edi,ReciveCommandBufferOffset
mov ecx,BytesCommandRecived
dec ecx
dec ecx
add edi,ecx
mov al,0ah
std
repne scasb
cld
xor eax,eax
— проверяем первый символ ответа;
mov cl,[edi+2]
cmp cl,’1′
— если это «1» то ждем еще одного сообщения от сервера
jz Wait2Answer
cmp cl,’3′
— если ответ больше «3» — произошла ошибка;
jna NoErrorProcessed
call MessageBoxA,newhwnd,edi,offset ErrorCap,40h
ErrorProcessed:
xor eax,eax
inc eax
NoErrorProcessed:
ret
SendCommandInSocket endp

Необходимо учесть еще одну вещь – перед отправкой команды PORT, нам надо создать слушающий сокет, это мы делаем с помощью вызова процедуры CreateListenSock.

CreateListenSock proc
pushad
— создаем сокет;
call socket, AF_INET, SOCK_STREAM, IPPROTO_TCP
mov datasock,eax
— переводим его в не-блокирующий режим, указывая, что хотим получать в процедуре
окна сообщения о подтверждении приконекчивания к этому сокету, о поступлении
новых данных, и о закрытии соединения;
call WSAAsyncSelect, datasock, newhwnd, WM_DATASOCK, FD_ACCEPT+FD_READ+FD_CLOSE
— ввязываем сокет с локальным адресом;
mov sin_port,0 ; указываем ноль, в этом случае система даст нам
; первый свободный порт
mov sin_family,AF_INET
mov sin_addr,INADDR_ANY
call bind, datasock, offset sockaddr_in, 16
— получаем инфу о сокете;
call getsockname,datasock,offset sockaddr_in,offset szSockaddr_in
— преобразуем номер порта к нормальному виду;
xor eax,eax
mov ax,sin_port
call ntohs,eax
push eax
shr eax,8
— дальше преобразуем номер порта в символы ASCII;
call DECtoASCII,eax,PortInPort
— и записываем их в шаблон команды PORT
mov al,’,’
stosb
pop eax
and eax,0ffh
call DECtoASCII,eax,edi
mov ax,0a0dh
stosw
mov esi,PortInPort
— слушаем сокет;
call listen, datasock, 1
popad
ret
CreateListenSock endp

Итак последней отправленной командой была команда LIST, после нее на соединение данных должен прийти список файлов текущей директории, соответственно после отправки сообщения нам необходимо подождать пока этот список будет нами получен, т.к. даже если сервер отправил нам сообщение о том, что он успешно завершил отправку всех данных это совсем не значит, что наш поток уже все отработал и получил, поэтому мы ожидаем окончания получения функцией WaitTransferComplete.

— получает в качестве аргумента в течении которого мы буде ждать ОКОНЧАНИЯ получения
данных, после того, как соединение будет закрыто со стороны сервера.
WaitTransferComplete proc uses ecx edi, TimeToWaitEndTransfer:dword
WaitProgress:
— ждем установления события закрытия соединения со стороны сервера, оно устанавливается
в главной процедуре окна;
call WaitForSingleObject,HWaitCloseEvent,-1
— дальше ждем, события успешного получения данных нашим потоком, которое в нем и
устанавливается;
call WaitForSingleObject,HWaitDataEvent,TimeToWaitEndTransfer
or eax,eax
jz CloseDataSocks
— был таймаут, и если мы получаем директорию, то выходим без ошибки, т.к. при получении
директории у нас всегда таймаут, потому, что мы заранее не знаем количество получаемых
байт и поток получения не может установить событие успешного получения;
cmp TimeToWaitEndTransfer,1000 ;если ждем каталог
jz CloseDataSocks
call MessageBoxA,newhwnd,offset ErrTimeOutCommand,offset ErrorCap,40h

CloseDataSocks:
— сбрасываем событие успешного получения;
call ResetEvent,HWaitDataEvent
— закрываем соединение со своей стороны;
call closesocket,ReciveDataSock
call closesocket,datasock
ret
WaitTransferComplete endp

В случае успешного завершения процедуры выше в буфере приема данных будет лежать таблица каталога. Ниже по программе мы обрабатываем полученную таблицу и по очереди получаем все найденные в ней файлы, получение файла ничем не отличается от получения директории, поэтому здесь этого я описывать не буду. После того, как все файлы были получены и сохранены мы закрываем управляющее соединение и завершаем поток.

Заключение.

Мы разобрали основные принципы работы с протоколом FTP со стороны клиента, конечно же были затронуты далеко не все аспекты этой задачи. Например не была рассмотрена отправка файлов на сервер, но думаю, внимательно изучив материал выше, а так же прилагающийся исходный код, можно без проблем сделать и это, пусть дальнейшее изучение протокола FTP со стороны сервера будет вашим «домашним заданием».

Список кодов ответов FTP (ФТП) при соединении

Полный список кодов ответов FTP для web мастеров. Здесь вы сможете найти полный список ответов ФТП при создании соединения. Ответ FTP сервера на любую команду FTP сервера состоит из трех цифр. У каждой цифры есть своё значение, которое приводится в списке ниже.

Первая цифра ответа ФТП

Единица означает, что команда принята к выполнению но ещё не завершена
Двойка означает, что выполнение команды успешно завершено
Тройка говорит о том, что команда принята и ожидается какая-либо дополнительная команда
Четверка говорит о том, что в данный момент команда выполнена быть не может
Пятерка означает принципиальную невозможность выполнения команды

В ТЕМУСТАТЬИ

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Обзор Elementor Pro: мощный визуальный конструктор для WordPress

Вторая цифра ответа ФТП

Ноль соответствует синтаксической ошибке
Единица соответствует информационному сообщению
Двойка говорит о том, что сообщение относится либо к управляющему соединению, либо к соединению данных
Тройка соответствует сообщениям об аутентификации пользователя и его правах
Значение четверки не определено
Пятерка соответствует сообщению о состоянии файловой системы

Третья цифра ответа ФТП

Третья цифра окончательно специфицирует ошибку.

Список кодов ответов ФТП

100 Запрошенное действие инициировано, дождитесь следующего ответа прежде, чем выполнять новую команду.
110 Комментарий
120 Функция будет реализована через nnn минут
125 Канал открыт, обмен данными начат
150 Статус файла правилен, подготавливается открытие канала
200 Команда корректна
202 Команда не поддерживается
211 Системный статус или отклик на справочный запрос
212 Состояние каталога
213 Состояние файла
214 Справочное поясняющее сообщение
215 Выводится вместе с информацией о системе по команде SYST
220 Служба готова для нового пользователя.
221 Благополучное завершение по команде quit
225 Канал сформирован, но информационный обмен отсутствует
226 Закрытие канала, обмен завершен успешно
227 Переход в пассивный режим (h1,h2,h3,h4,p1,p2).
228 переход в длинный пассивный режим (длинный адрес, порт).
229 Переход в расширенный пассивный режим (|||port|).
230 Пользователь идентифицирован, продолжайте
231 Пользовательский сеанс окончен; Обслуживание прекращено.
232 Команда о завершении сеанса принята, она будет завершена по завершении передачи файла.
250 Запрос прошёл успешно
257 «ПУТЬ» создан.
331 Имя пользователя корректно, нужен пароль
332 Для входа в систему необходима аутентификация
350 Запрошенное действие над файлом требует большей информации
404 Данный удалённый сервер не найден
421 Процедура невозможна, канал закрывается
425 Открытие информационного канала не возможно
426 Канал закрыт, обмен прерван
434 Запрашиваемый хост недоступен
450 Запрошенная функция не реализована, файл не доступен, например, занят
451 Локальная ошибка, операция прервана
452 Ошибка при записи файла (недостаточно места)
500 Синтаксическая ошибка, команда не может быть интерпретирована (возможно она слишком длинна)
501 Синтаксическая ошибка (неверный параметр или аргумент)
502 Команда не используется (нелегальный тип MODE)
503 Неудачная последовательность команд
504 Команда не применима для такого параметра
530 Вход не выполнен! Требуется авторизация (not logged in)
532 Необходима аутентификация для запоминания файла
550 Запрошенная функция не реализована, файл недоступен, например, не найден
551 Запрошенная операция прервана. Неизвестный тип страницы.
552 Запрошенная операция прервана. Выделено недостаточно памяти
553 Запрошенная операция не принята. Недопустимое имя файла.

Памятка по командам FTP

Автор обзора: Денис «Reagent» Ходус. Дополнено © мной

Все мы знаем сочетание буковок FTP, которое расшифровывается как File Transfer Protocol. Старая, но до сих используемая технология передачи файлов между двумя компьютерами с использованием TCP/IP сети.

Большинство из нас пользуется для работы с этим протоколом какими-либо утилитами или модулями файловых менеджеров. Но давайте представим себе ситуацию, когда нужно получить доступ к FTP-серверу через командную строку. Никаких панелей со списком файлов и кнопочками «Копировать» и «Удалить» там у Вас не будет. (Кстати, я часто именно через командную строку лажу — мне так просто даже быстрее — если приходится что-то сделать или проверить FTP.)

Итак, команда для работы с FTP как в Windows, так и в Unix (включая Linux Debian, CentOS, ubuntu, rhel, FreeBSD и т.д.) одинаковая — так и называется — «ftp».

Просто подсоединиться к определенному серверу — синтаксис тоже отличаться не будет:

А вот хитрости типа автологина и автоматического принятия или отсылки файлов — у разных ОС немного свои и мы здесь их разбирать не будем. Зато разберем — что же через командрую строку все-же сделать можно в самой сессии — и сами команды, конечно.

Итак, начнем. В этой памятке приведены самые часто используемые команды, которые позволят Вам свободно общаться с любым сервером с любым набором опций.

Открываем консоль. Запускаем нашу утилиту, введя буквы ftp
Видим на экране приглашение:

Выдает список поддерживаемых команд

Получение короткого описания указанной команды.

Присоединиться к указанному серверу (пишем его имя либо IP-адрес).
Также можно указать порт через пробел. По-умолчанию используется стандартный — 21.

При этом сервер Вас спросит логин и пароль.

Закрыть соединение с текущим FTP сервером.

Закрыть соединение и выйти из утилиты FTP.

Залогиниться на данном сервере под указанным пользователем (Вы должны быть уже подключены).

где вместо «myusername» подставьте имя пользователя, под которым логинитесь. FTP-сервер Вас спросит пароль для этого пользователя перед тем, как пустить.

Показать список файлов и директорий в текущей папке на сервере.

Выгрузить список файлов из нескольких директорий в файл на Ваш компьютер.

Перейти в указанную папку на сервере.

Перейти у указанную папку на Вашем компьютере.

Показать текущий путь (текущую папку) на FTP сервере.

Загрузить с FTP сервера в текущую папку Вашего компьютера указанный файл.

Загрузить несколько файлов в текущую папку Вашего компьютера с сервера FTP.

Загрузить с сервера FTP на Ваш компьютер указанный файл только если Ваш файл старее (т.е. удаленный файл свежее).

Здесь первый аргумент — имя файла на сервере, а второй аргумент — имя файла на Вашем компьютере.

Загрузить на FTP сервер указанный файл с Вашего компьютера.

Загрузить на сервер несколько файлов с Вашего компьютера.

Удалить указанный файл на сервере.

Удалить несколько файлов на сервере.

Создать директорию на сервере.

Удалить директорию на сервере

Избавляет от необходимости подтверждать получение файлов по маске нажатием клавиши «Y».

Отображает индикацию загрузки файлов с помощью меток хеширования (#).
Одна такая метка, по-умолчанию = 2048 байт.
Нужно для того, чтобы видеть — не подвисло ли получение больших файлов.

Установка режима передачи данных в двоичном формате (подходит для любых типов файлов).

Что такое FTP и как им пользоваться — FileZilla

Относительно многие пользователи пользуются FTP . Те же кто не пользуются могут рано или поздно начать, а посему им придется искать клиент для работы этим самым протоколом.

Признаться честно, столкнувшись с этой «проблемой» я не особо долго заморачивался и пользовался простейшей надстройкой над браузером, несправедливо полагая, что «и так хорошо» (с).

Оказалось, что выбор программы-клиента для работы с этим протоколом не менее важно чем выбор любого другого софта, ибо это напрямую сказывается на скорости работы, комфорте и прочих полезных удобностях.

Посему я поведаю немного о программе-клиенте которой я пользуюсь.

Общее описание протокола

Традиционно, у нас два формата. Видео и текстовый. Видеоформат Вы можете увидеть ниже, а текстовый сразу после него. Какой из них Вам ближе, — смотрите сами.

Формально это что-то вроде подключения к некой папке, которая находится на другом компьютере/сервере, используя сеть или интернет. В случае, если передача файла была прервана по каким-либо причинам, протокол предусматривает средства для докачки файла, что бывает очень удобно при передаче больших файлов.

FTP является одним из старейших прикладных протоколов, появившимся задолго до HTTP, в 1971 году. Он и сегодня широко используется для распространения программного обеспечения и передачи файлов.

Программа-клиент для FTP

FTP -клиента, представляет собой программу для подключения к тому или иному FTP -серверу (как аська, например, позволяет подключиться серверу ICQ и посылать таким же подключенным свои сообщения или получать оные от них).

В общем-то, программа, которую я хочу порекомендовать, довольно известна в сети и существует уже давно. Называется она FileZilla и, во-первых, полностью бесплатна, во-вторых кроссплатформенная (т.е. идет под почти всеми операционными системами), а в-третьих поддерживает русский язык, что, несомненно, приятно и удобно.

Так же, она содержит в себе нормальный внятный интерфейс, максимум возможностей, минимум глюков и отличную скорость работы.

Проще говоря, меня она вполне себе устраивает, а посему я хочу поделиться оной и с Вами :)

Скачиваем Filezilla для работы с FTP

Скачать программу можно с сайта разработчика.
Установка предельно проста и на ней я останавливаться не буду.

Собственно, использование тоже большого труда не составит, однако я сделаю небольшую инструкцию, чтобы Вам было проще и удобней разобраться что там к чему.

Прежде всего, Вам нужно знать логин, пароль и адрес FTP -сервера к которому Вы хотите подключиться.

В рамках данной статьи я предполагаю, что Вы таки его знаете, а если и нет, то следуя рекомендациям в статье, Вы и без оных просто сможете узнать куда их ввести и куда нажать чтобы соединиться с удаленным сервером (так сказать, на будущее). Дабы не расписывать всё отдельно, я покажу Вам наглядно (все скришноты кликабельны, т.е. увеличиваются по клику) в виде картинок.

Взаимодействуем с протоколом по средством программы

Сначала жмем в значок:

В появившемся окошке жмем в кнопочку » Новый хост «, выбираем в поле тип входа » Нормальный » (если у Вас нет логина и пароля и Вы знаете, что FTP доступно без них, то можете оставить тип входа » Анонимный «) и заполняем поля » Хост » (как раз адрес FTP -сервера к которому Вы хотите подключиться), Логин , Пароль и тыкаем в кнопочку » ОК «:

После этого, нажав на «флажок» возле известной Вам кнопочки, Вы увидите список введеных Вами хостов с заданными названиями (по умолчанию это » Новый хост «), нажав на название Вы соединитесь с сервером. После соединения слева Вы увидите окно отображающее содержимое Вашего компьютера, а справа удаленного FTP .

Далее все собственно просто как в » Мой компьютер » — перетаскивайте нужные вам файлы с сервера или на него, путешествуйте по папкам и тд и тп.

Послесловие

Вот, собственно и всё. Надеюсь, что оная статья оказалась для Вас хоть как-то полезна.
Если что-то не понятно и есть вопросы, то смело задавайте их в комментариях — я обязательно постараюсь помочь Вам ;)

Интернет технологии (архив 2001-2010)

Служба FTP (от протокола — File Transfer Protocol) — предназначена для обмена файлами.

FTP служба построена по хорошо известной схеме «клиент-сервер».

Клиент (браузер,Windows Commander, NetVampir . ) посылает запросы серверу и принимает файлы.

Сервер FTP (vsftpd, IIS . ) обрабатывает запросы клиента на получение файла.

Взаимодействие клиент и сервера по протоколу FTP.

Служба FTP базируется на двух стандартах:

URL (Universal Resource Locator) — универсальный способ адресации ресурсов в сети ;

FTP (File Transfer Protocol) — протокол передачи файлов.

File Transfer Protocol — протокол передачи файлов, протокол высокого уровня (а именно, уровня приложений).
. Используется службой FTP для передачи файлов.

Первый стандарт — RFC114 (File Transfer Protocol A.K. Bhushan Apr-10-1971).

Последняя версия — RFC959 (File Transfer Protocol J. Postel, J.K. Reynolds Oct-01-1985).

FTP отличается от других приложений тем, что он использует два TCP соединения для передачи файла.

Управляющее соединение — соединение для посылки команд серверу и получение ответов от него. Для канала управления используется протокол Telnet.

Соединение данных — соединение для передачи файлов.

Схема двух каналов соединения по протоколу FTP

В старых версиях для передачи данных использовался только 20-й порт (активный режим), в современных версиях FTP-серверов порт для канала данных может назначаться сервером из нестандартных (N > 1024) портов (пассивный режим).

Протокол FTP определяет запрос-ответный способ взаимодействия между программой-клиентом и программой-сервером.

Работа FTP на пользовательском уровне содержит несколько этапов:

Идентификация (ввод имени и пароля).

Определение режима обмена (поблочный, поточный, ascii или двоичный).

Выполнение команд обмена (get, mget, dir, mdel, mput или put).

Завершение процедуры (quit или close).

5.2.1 Различие работы пассивного режима и активного.

5.2.1.1 Активный режим

Действия сервера и клиента:

Клиент устанавливает связь и посылает запрос на 21 порт сервера с порта N (N>1024)

Сервер посылает ответ на порт N (N>1024) клиента

Сервер устанавливает связь для передачи данных по порту 20 на порт клиента N+1

5.2.1.2 Пассивный режим:

Действия сервера и клиента:

Клиент устанавливает связь и посылает запрос (сообщает, что надо работать в пассивном режиме) на 21 порт сервера с порта N (N>1024)

Сервер посылает ответ и сообщает номер порта для канала данных P (P>1024) на порт N (N>1024) клиента

Клиент устанавливает связь для передачи данных по порту N+1 на порт сервера P (P>1024)

Активный FTP выгоден для FTP-сервера, но вреден для стороны клиента. FTP сервер пытается соединиться со случайными высокими (по номеру) портами на клиенте, такое соединение наверняка будет блокировано брандмауэром на стороне клиента.

Пассивный FTP выгоден для клиента, но вреден для FTP-сервера. Клиент будет делать оба соединения к серверу, но одино из них будет к случайному высокому порту, такое соединение наверняка будет блокировано брандмауэром на стороне сервера.

Ниже приведены примеры запроса клиента и ответа сервера:

5.2.1.3.1 Пример запроса на чтение каталога

Установка соединения
Connecting to ftp.ru .
Connected to ftp.ru [194.87.5.52]

сервер: 220 megillah.demos.su FTP server (Version wu-2.4) ready. — // код ошибки, имя хоста, протокол, версия сервера, только для чтения
клиент: USER anonymous // имя пользователя
сервер: 331 Guest login ok, send your complete e-mail address as password. //код ошибки, имя пользователя корректно, нужен пароль
клиент: PASS ****** // пароль клиента
сервер: 230 Guest login ok, access restrictions apply. //код ошибки, пользователь идентифицирован, продолжайте
клиент: CWD / // переход к корневой директории
сервер: 250 CWD command successful. // команда выполнена успешно
клиент: TYPE A // передавать информацию в текстовом виде
сервер: 200 Type set to A. // текстовый тип установлен
клиент: PASV // сервер должен определить нестандартный порт данных, начать его слушать
сервер: 227 Entering Passive Mode (194,87,5,52,9,75) // сервер возвращает ip-адрес (194.87.5.52) и номер порта (2383)
клиент: LIST // передать по соединению данных список имен файлов в директории
сервер: Data connection established // установлено соединение данных
клиент: 150 Opening ASCII mode data connection for /bin/ls. // татус файла правилен, подготавливается открытие канала

Передача информации по каналу данных
сообщение: Data transfer started // начало передачи информации
сообщение: DATA connection closed by remote server // закрытие канала передачи данных

Информирование клиентом пользователя
сообщение: Received 1 428 bytes in 0:00:00 (35 700 bytes/s) // сколько байт получено (1 428), за какое время (ч.мм.сс) и с какой средней скоростью (35 700 bytes/s)
сообщение: JOB COMPLETED SUCCESSFULLY // работа завершена

5.2.1.3.2 Пример запроса файла

Установка соединения
Connecting to ftp.ru .
Connected to ftp.ru [194.87.5.52]

сервер: 220 megillah.demos.su FTP server (Version wu-2.4) ready. // код ошибки, имя хоста, протокол, версия сервера, только для чтения
клиент: USER anonymous // имя пользователя
сервер: 331 Guest login ok, send your complete e-mail address as password. // имя пользователя корректно, нужен пароль
клиент: PASS ****** // пароль клиента
сервер: 230 Guest login ok, access restrictions apply. // пользователь идентифицирован, продолжайте
клиент: CWD /www.FAQ.win // сменить каталог на /www.FAQ.win
сервер: 550 /www.FAQ.win: Not a directory. // директория /www.FAQ.win не найдена
клиент: TYPE I // передавать файл в бинарном виде
сервер: 200 Type set to I. // бинарный тип установлен
клиент: STAT /www.FAQ.win // запрос информации о файле /www.FAQ.win
сервер: 211-status of /www.FAQ.win: // начало передачи информации
сервер: -rw-r—r— 1 root root 31368 Jan 18 1999 /www.FAQ.win // продолжение передачи информации
сервер: 211 End of Status // конец передачи информации
клиент: PASV // сервер должен определить нестандартный порт данных, начать его слушать
сервер: 227 Entering Passive Mode (194,87,5,52,9,79) // сервер возвращает ip-адрес (194.87.5.52) и номер порта (2383)
клиент: REST 64 // начать докачку файла, пропустив первые 64 байта
сервер: Data connection established // установлено соединение данных
сервер: 350 Restarting at 64. (null) // команда принята
клиент: REST 0 // начать докачку файла, пропустив первые 0 байтов
сервер: 350 Restarting at 0. (null) // команда принята
клиент: RETR /www.FAQ.win // выдать файл www.FAQ.win
сервер: 150 Opening BINARY mode data connection for /www.FAQ.win (31368 bytes). // статус файла правилен, подготавливается открытие канала данных, размер файла 31 368 байт

Передача информации по каналу данных
сообщение: Data transfer started // начало передачи файла
сообщение: DATA connection closed by remote server // закрытие канала передачи данных

Информирование клиентом пользователя
сообщение: Received 31 368 bytes in 0:00:02 (10 477 bytes/s) // сколько байт получено (31 368), за какое время (ч.мм.сс) и с какой средней скоростью (10 477 bytes/s)
сообщение: JOB COMPLETED SUCCESSFULLY // работа завершена

5.2.1.4 Некоторые команды

управления доступом
USER — имя пользователя
PASS — пароль
CWD — имя новой рабочей директории
CDUP — перейти на один уровень директории вверх
QUIT — выход

установки параметров передачи
PORT ip1,ip2,ip3,ip4,p1,p2 — IP адрес клиента (ip1,ip2,ip3,ip4) и порт (p1,p2) (расчет порта p1*256+p2=номер порта)
Пример:
Entering Passive Mode (194,87,5,52,9,79)
194.87.5.52 — IP адрес
2383 — номер порт, расчет порта 9*256+79=2383
PASV — сервер должен определить нестандартный порт данных, начать его слушать и вернуть ip-адрес и номер порта в формате PORT
TYPE < < A | E >[ N | T | C ] > | I | L размер-байта (по умолчанию — A N) — специфицирует тип информации

действия
RETR — имя файла (взять файл)
STOR — имя файла (передать файл)
REST — маркер (для докачки уже частично скаченного файла — обычно указывается смещение в байтах)
DELE — имя удаляемого файла
RMD — имя удаляемой директории
MKD — имя создаваемой директории
PWD — в ответе указать имя текущей директории
LIST [имя директории или файла] — передать по соединению данных список имен файлов в директории или информацию о файле
SYST — ответ должен содержать тип ОС сервера и др. полезную информацию
STAT — ответ содержать информацию о текущем состоянии сервера; если команда выдана в процессе передачи файла и предварена посылкой сигналов telnet-а IP и Synch, то ответ д. содержать информацию о состоянии пересылки
STAT имя файла — ответ должен содержать информацию о файле

прочее
HELP [имя команды] — описание работы данной команды
NOOP — пустая команда

5.2.1.5 Некоторые типы данных:

ASCII (TYPE A ) — передача текстовой информации

IMAGE (TYPE I ) — передача бинарных файлов

5.2.1.6 Коды возврата

При выполнении FTP система возвращает трехразрядные десятичные коды-ошибки, которые позволяют судить о корректности обмена. Выдача кода сопровождается текстом-комментарием. Первая цифра может принимать значения от 1 до 5.

Первая цифра:
1yz — предварительный положительный ответ: команда принята, но не завершена
2yz — действие успешно завершено
3yz — команда принята, сервер ждет дополнительную информацию
4yz — временная неудача, повторить через некоторое время
5yz — фатальная ошибка

Вторая цифра:
x0z — синтаксис
x1z — ответ на запрос информации
x2z — ответ относится к состоянию управляющего соединения или соединения данных
x3z — аутентификация и учет
x4z — смысл не определен
x5z — состояние файловой системы сервера

5.2.1.6 Некоторые коды возврата

120 Функция будет реализована через nnn минут

125 Канал открыт, обмен данными начат

150 Статус файла правилен, подготавливается открытие канала

200 Команда корректна

211 Системный статус или отклик на справочный запрос

212 Состояние каталога

213 Состояние файла

214 Справочное поясняющее сообщение

220 Слишком много подключений к FTP-серверу (можете попробовать позднее). В некоторых версиях указывает на успешное завершение промежуточной процедуры

221 Благополучное завершение по команде quit

225 Канал сформирован, но информационный обмен отсутствует

226 Закрытие канала, обмен завершен успешно

230 Пользователь идентифицирован, продолжайте

250 Запрос прошел успешно

331 Имя пользователя корректно, нужен пароль

332 Для входа в систему необходима аутентификация

421 Процедура не возможна, канал закрывается

425 Открытие информационного канала не возможно

426 Канал закрыт, обмен прерван

450 Запрошенная функция не реализована, файл не доступен, например, занят

451 Локальная ошибка, операция прервана

452 Ошибка при записи файла (не достаточно места)

500 Синтаксическая ошибка, команда не может быть интерпретирована (возможно, она слишком длинна)

501 Синтаксическая ошибка (неверный параметр или аргумент)

502 Команда не используется (нелегальный тип MODE)

503 Неудачная последовательность команд

504 Команда не применима для такого параметра

530 Система не загружена (not logged in)

532 Необходима аутентификация для запоминания файла

550 Запрошенная функция не реализована, файл не доступен, например, не найден

552 Запрошенная операция прервана, недостаточно выделено памяти

5.2.1.7 Соединение к FTP с помощью Telnet

Подсоединимся к командному порту FTP (21):

>telnet ipm.kstu.ru 21

TFTP — тоже протокол FTP, но поверх протокола UDP (т.е. протокол без гарантированной доставки). Может использоваться в локальной сети, где скорость передачи важнее. На практике используется редко.

5.4 Программы клиенты

FTP — программа запускается с командной строки.

Windows Comander — может работать как FTP-клиент. Позволяет работать с удаленными каталогами также как с локальными.

NetVampire — Специализированный FTP-клиент, который позволяет качать большие файлы и качать по плохим каналам.

Что такое код ftp_quit

FTP (File Transfer Protocol) – один из стандартных протоколов, созданный для TCP/IP и утвержденный в 1971 году. Применяется для загрузки сетевых страниц с частных устройств на серверы хостинга.

Что такое FTP

Формально FTP подразумевает подключение к определенной папке, которая находится на сервере, посредством Интернет. Несмотря на внушительный возраст, этот протокол до сих пор используется для передачи файлов, доступа к удаленным хостам и распространения программного обеспечения.

В отличие от HTTP, FTP основан на сессиях работы, поддерживает аутентификацию пользователей и текстовый режим, позволяет выполнять операции над файловой системой. Его главная особенность заключается в том, что с ним возможно множественное (в частности, двоичное) подключение. Один из каналов является управляющим – через него поступают команды серверу и возвращаются ответы. Остальные используются непосредственно для передачи данных. При этом FTP позволяет сокращать расходы трафика и время, затраченное на пересылку больших файлов.

Функции FTP

Для работы с протоколом используют стандартные UNIX-команды. С их полным перечнем можно ознакомиться, набрав в специальной строке «help» или «?». Наиболее часто используются следующие команды:

  • open – устанавливает связь с FTP-сайтом. Применяется при обращении к разным серверам во время одного сеанса работы. Требует предварительного закрытия предыдущей FTP-площадки командой close;
  • user – используется для повторного ввода имени и пароля пользователя для аутентификации. Функция необходима в тех случаях, когда удаленная машина допускает пользователей с определенными параметрами;
  • bye или quit – используется параллельно с close, закрывает все связи и завершает выполнение программы;
  • remotehelp – открывает справочную информацию по командам, которые поддерживает удаленный FTP-сервер.

При работе с функциями необходимо придерживаться следующих правил:

  • использовать символ «/» для разделения каталогов;
  • следить за употреблением строчных и прописных букв (важен регистр);
  • использовать префиксы, которые начинаются с точки (опционально).

Команды и чаще всего вспомогательные программы для FTP-соединений позволяют загружать на сервер файлы с компьютера и в обратном направлении, а также менять права доступа к отдельным объектам.

Программы для FTP-соединения

Специализированное ПО используется для эффективной и наглядной работы с FTP-серверами. Большинство приложений ориентировано не только на профессионалов, но и на новичков, которые легко справятся с интуитивно понятным интерфейсом. Рассмотрим самые популярные программы, выполняющие функции FTP-клиентов.

Far Manager

Far Manager – пример консольного файлового менеджера, разработанного под ОС Windows российским программистом Евгением Рошалом. Программа отличается узнаваемым двухоконным интерфейсом и стандартной сине-белой цветовой схемой. Управление осуществляется через систему команд, вводимых с клавиатуры. При работе с FTP поддерживается доступ через различные типы прокси-серверов, выполнение поиска и замены символов во множестве файлов срабатывает автоматическая докачка. Является свободно распространяемым ПО.

Total Commander

Total Commander имеет собственный FTP-клиент, который позволяет выполнять все стандартные операции с файлами и папками: копировать, вырезать, создавать, переименовывать, удалять, просматривать, редактировать. Следует учесть, что доступы к FTP сохраняются в клиенте автоматически и хранятся незашифрованными. Total Commander является свободно распространяемым ПО.

FileZilla

FileZilla – популярный FTP-клиент с открытым кодом и мультиязычным интерфейсом. Разработан для ОС Windows, Linux и Mac OS. Поддерживает FTP через SSL/TLS (он же FTPS), IPv6, IDN. Работает с нелатинскими доменными зонами, способен передавать файлы большого объема (от 4 ГБ), позволяет настраивать ограничения по скорости скачивания и передачи. Реализована поддержка Drag-and-drop, удаленное редактирование файлов, работа с вкладками и очередью загрузки. Является свободно распространяемым ПО.

WinSCP

WinSCP – удобный графический клиент для работы с FTP. Предназначен для использования в среде ОС Windows. Поддерживает копирование файлов в защищенном режиме, автоматизацию при помощи скриптов, интеграцию с Pageant, а также выделяется узнаваемым интерфейсом в стиле Norton Commander. В клиенте предусмотрена возможность сохранения настроек соединения, синхронизация папок по настраиваемым алгоритмам, есть встроенный текстовый редактор. Является свободно распространяемым ПО.

FireFTP

FireFTP – не отдельное приложение, а расширение для популярного браузера Mozilla FireFox. Предоставляет доступ к FTP-серверу в отдельной вкладке. После инсталляции расширение можно найти в панели «Инструменты». Клиент работает в двухоконном режиме и позволяет выполнять стандартные операции: перемещение, добавление, переименование, удаление. Реализована поддержка нескольких учетных записей, шифрование соединений, изменение прав доступа к файлам и их редактирование без предварительной загрузки на ПК. Является свободно распространяемым ПО.

Конкретный клиент для работы можно выбрать исходя из того, для чего нужен FTP и каковы задачи работы на сервере.

Как подключиться к хостингу через FTP

Выберите подходящий клиент и установите его на свой ПК. Далее используйте для входа на хостинг следующую информацию:

  • логин и пароль;
  • хост или адрес сервера;
  • порт для подключения (необходимо указывать «21»).

Дополнительно может потребоваться указание типа сервера и способа входа. Далее необходимо нажать кнопку для подключения и начать работу с файлами и папками. Чтобы выбрать, чем открыть FTP, обратитесь к предыдущему пункту.

Илон Маск рекомендует:  Знак французских ВВС
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL