Что такое протокол ftp. Протокол передачи файлов FTP. Подключение по FTP. Протокол ftp Ftp системы

Служба архивов FTP.

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

Информация в FTP-архивах разделена, в основном, на три категории: Защищенная информация, режим доступа к которой определяется ее владельцами и разрешается по специальному соглашению с потребителем. К этому виду ресурсов относятся коммерческие архивы (к примеру, коммерческие версии программ в архивах ftp.microsoft.com ), закрытые национальные и международные некоммерческие ресурсы (например, работы по международным проектам CES или IAEA), частная некоммерческая информация со специальными режимами доступа (например,частные благотворительные фонды). Информационные ресурсы ограниченного использования, к которым относятся, например, программы класса shareware. В данный класс могут входить ресурсы ограниченного времени использования или ограниченного времени действия. Свободно распространяемые информационные ресурсы или freeware, если речь идет о программном обеспечении. К этим ресурсам относится все, что можно свободно получить по сети без специальной регистрации. Это может быть документация, программы или что-либо еще. Следует отметить,что свободно распространяемое программное обеспечение не имеет сертификата качества, но его разработчики открыты для обмена опытом.

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

Технология FTP была разработана в рамках проекта ARPA и предназначена для обмена большими объемами информации между машинами с различной архитектурой. Главным в проекте было обеспечение надежной передачи, поэтому с современной точки зрения FTP кажется перегруженным излишними редко используемыми возможностями. Стержень технологии составляет FTP-протокол.

FTP-протокол.

FTP (File Transfer Protocol, или “Протокол передачи данных”) - один из старейших протоколов в Internet и входит в его стандарты. Первые спецификации FTP относятся к 1971 году. С тех пор FTP претерпел множество модификаций и значительно расширил свои возможности. FTP может использоваться как в программах пользователей, так и в виде специальной утилиты операционной системы.

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

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

Модели работы FTP.

Простейшая модель работы протокола FTP представлена на рисунке 1. В FTP соединение инициируется интерпретатором протокола пользователя. Управление обменом осуществляется по каналу управления в стандарте протокола TELNET. Команды FTP генерируются интерпретатором протокола пользователя и передаются на сервер. Ответы сервера отправляются пользователю также по каналу управления. В общем случае пользователь имеет возможность установить контакт с интерпретатором протокола сервера и отличными от интерпретатора протокола пользователя средствами.

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

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

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

Алгоритм работы протокола FTP состоит в следующем:

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

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

Алгоритм работы при соединение двух FTP-серверов, ни один из которых не расположен на локальном хосте пользователя:

Модуль “Интерпретатор протокола пользователя” указал модулю сервера “Интерпретатор протокола сервера 1” работать в пассивном режиме, после чего модуль “Интерпретатор протокола сервера 1” отправил пользователю адрес и номер порта (N) , который он будет слушать. Модуль “Интерпретатор протокола пользователя” назначил модуль сервера 2 “Интерпретатор протокола сервера 2” в качестве активного участника соединения и указал ему передавать данные на хост “Интерпретатор протокола сервера 1” на порт (N). “Интерпретатор протокола пользователя” подал “Интерпретатору протокола сервера 1” команду “сохранить поступившие данные в таком-то файле”, а “Интерпретатор протокола сервера 2” - “передать содержимое такого-то файла”. Между модулями “Интерпретатор протокола сервера 1” и “Интерпретатор протокола сервера 2” образуется поток данных, который управляется клиентским хостом. Ниже приведена схема организации передачи данных между двумя серверами FTP, соответствующая рисунку 2. Здесь использованы следующие обозначения: User PI - интерпретатор протокола пользователя; Server1(2) интерпретатор протокола сервера1 (сервера2).

User PI (U) Ы Server1 (S1) User PI (U) Ы Server2 (S2)
U Ю S1: Connect

U Ь S1: 227 Entering Passive Mode.

A1, A2, A3, A4, a1, a2

U Ю S2 Connect

U Ю S2: PORT A1, A2, A3, A4, a1, a2

U Ь S2: 200 Okay
U Ю S1: STOR ... U Ю S2: RETR ...

S1 Ю S2: Connect ...

Основу передачи данных FTP составляет механизм установления соединения между соответствующими портами и выбора параметров передачи. Каждый участник FTP-соединения должен поддерживать порт передачи данных по умолчанию. По умолчанию “Программа передачи данных пользователя” использует тот же порт, что и для передачи команд (обозначим его “U”), а “Программа передачи данных сервера” использует порт L-1, где “L”- управляющий порт. Однако, участниками соединения используются порты передачи данных, выбранные для них “Интерпретатором протокола пользователя”, поскольку из управляющих процессов участвующих в соединении, только “Интерпретатор протокола пользователя” может изменить порты передачи данных как у “Программы передачи данных пользователя”, так и у “Программы передачи данных сервера”.

Пассивная сторона соединения должна до того, как будет подана команда “начать передачу”, “слушать” свой порт передачи данных. Активная сторона, подающая команду к началу передачи данных, определяет направление перемещения данных.

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

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

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

Команды протокола .

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

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

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

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
U: USER Gluk
> S: 331 User name okay, need password
U: PASS murmur
S: 230 User logged in, proceed
U: RETR test.txt
S: 150 File status okay; about to open data connection

<Идет передача файла...>

S: 226 Closing data connection, file transfer successful
U: TYPE I
S: 200 Command okay
U: STOR /home/images/first.my
S: 550 Access denied
U: QUIT

Протоколы TFTP и SFTP.

FTP-протокол имеет двух “младших братьев”: SFTP - Simple FTP и TFTP - Trivial FTP.

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

Поскольку передача данных осуществляется поверх UDP, протокол TFTP реализует собственные методы надежной доставки данных - пакеты подтверждения, нумерация блоков данных и пакетов подтверждения и т.п. Все очень похоже на упрощенный вариант эмуляции протокола TCP.

TFTP работает лишь пятью командами:

Read request (RRQ) - запрос на чтение. Write request (WRQ) - запрос на запись. Data (DATA) - пакет данных. Acknowledgment (ACK) - подтверждение. Error (ERROR) - ошибка.

Процесс передачи данных начинается с поступления от клиента TFTP на сервер запроса на чтение или запись файла. Соединение устанавливается после получения подтверждения готовности на один из запросов, либо на запись, либо на чтение.

При открытии соединения, каждая из сторон выбирает (случайным образом) уникальный идентификатор - TID, который используется и UDP как порт соединения. Каждый пересылаемый пакет ассоциирован с двумя TID, соответствующими каждой стороне соединения. Первоначальный запрос отправляется инициатором TF TP-соединения на UDP-порт 69 (порт инициализации), в котором указывается порт соединения. Дальнейший обмен уже происходит через порты, выбранные участниками передачи данных.

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

Если длина пакета менее 512 байт - это служит сигналом для закрытия канала связи. В случае потери пакета при передаче, через некоторый промежуток времени сервер отправит этот пакет данных повторно.

Три типа ситуаций порождают отправку ошибочных пакетов:

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

При большом количестве сообщений об ошибках соединение может быть закрыто по инициативе одной из сторон.

Схема TFTP-транзакции следующая:

Хост A отправляет запрос WRQ хосту B. Порт источника - TIDA, порт назначения - 69. Пакет содержит имя файла, тип передачи. Хост B отправляет ACK (номер блока - 0) хосту A. Порт источника - TIDB, порт назначения - TIDA. Хост A отправляет (по соединению TIDA - TIDB) команду DATA и блок данных. Пакет также содержит номер блока.

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

SFTP поддерживает механизмы идентификации пользователя, передачу файлов, просмотр каталогов, изменение текущего каталога, переименование и удаление файлов. В большинстве операций, которые пользователь проводит с удаленным FTP-сервером, этого сервиса вполне достаточно. SFTP может передавать 8-битный поток данных и использует, как TFTP, только один канал соединения - как для команд, так и для данных. В отличие от TFTP, SFTP работает поверх TCP, порт 115.

Команды SFTP отправляются поочередно, после получения ответа обработки предшествующей команды. Все команды состоят из четырех ASCII-символов и символа пробела, который отделяет команду от аргументов. Ответ сервера состоит из кода ответа и текстового сообщения. Каждая команда и ответ должны заканчиваться символом (‘

Протокол FTP является разновидностью протокола для передачи данных, который используется с целью копирования и перемещения файлов в интернете и внутри TCP-сетей. FTP достаточно часто применяется с целью загрузки страниц и документов различного типа на хостинговые компьютеры. Протокол FTP использует архитектуру «клиент-сервер» и различные соединения внутри сети для того, чтобы передавать команды и информацию от клиента к серверу и наоборот. Пользователям FTP разрешается проходить процедуру аутентификации при помощи логина и пароля, либо же, если такая форма разрешена на сервере, пользователи могут получать доступ в анонимном режиме.
Кроме обычного протокола, также применяется FTPS, представляющий собой особое расширение стандартного FTP, которое дает возможность клиентам получать доступ к серверу и использовать зашифрованные сессии передачи информации. Такой подход реализуется при помощи отправки команды аутентификации «auth tls», при этом серверу разрешается принимать либо отклонять соединения, не запрашивающие TLS-соединений.

SFTP

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

Особенности стандарта FTP

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

Особенности активного режима

Во время активного режима клиент инициирует управляющее соединение с серверным портом 21, передавая команду «port», при помощи которой указывается адрес и порт трансфера информации. После получения этой команды сервер запускает соединение собственного 20-го порта с указанным портом пользователя.
Основным недостатком данного метода является обязательное наличие у пользователя для работы выделенного IP-адреса в интернете. Кроме того, некоторые проблемы могут возникнуть, если клиент находится за брандмауэром либо NAT.

Особенности пассивного режима

Для того, чтобы установить пассивное соединение, пользователь должен передать серверу специальную команду «pasv». В качестве ответа на эту команду сервер передает информацию об адресе и порте, с которым клиент должен установить соединение. После получения этих данных, пользователь осуществляет подключение к серверному компьютеру и проводит передачу информации.
При использовании пассивного режима абсолютно все соединения инициируются клиентом, в связи с чем какие-либо требования к нему отсутствуют. Пользователю допускается пользоваться NAT и брандмауэром, а также не использовать выделенный IP-адрес. Поэтому сегодня в качестве основной разновидности доступа и передачи файлов по протоколу FTP в интернете используется именно пассивный режим.

Настройка в случае использования брандмауэра

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

Настройка в случае использования NAT

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

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

Понятие «протокол» означает согласованный формат обмена информацией между двумя устройствами. А сама как «file transfer protocol», что можно перевести как «протокол для передачи файлов». Для протокол FTP использует TCP-канал. Обмен построен по принципу «клиент-сервер». Передавать по этому протоколу нельзя, так как в нем нет защиты данных и на сервер передается открытый текст. Конечно, обычно для подключения к FTP-серверу нужно проходить аутентификацию, но на это не стоит слишком надеяться, поскольку идентификатор и пароль пользователя передается открытым текстом.

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

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

Как использовать протокол FTP , если ваша ОС не Windows

Если вы предпочитаете Linux, то можно ознакомиться с документацией по доступным операциям, набрав команду $ man ftp. А для того, чтобы подключиться к FTP-серверу, нужно набрать $ ftp yoursite.at.domain. Чаще всего используются такие команды:

  • binary - изменение режима на передачу двоичных (нетекстовых) файлов, к примеру, картинок;
  • ascii - переключение на передачу текстовой информации;
  • cd foldername - смена текущего каталога на удаленном компьютере на входящую в него папку с именем foldername;
  • dir - просмотр всех файлов в текущем каталоге удаленного компьютера;
  • help - помощь по использованию команд;
  • mget - одновременное скачивание нескольких файлов;
  • put filename - служит для загрузки на удаленный ресурс локального файла filename;
  • mput - загрузка на удаленный ресурс нескольких файлов;
  • exit - завершение работы с FTP и выход в ОС.

Можно также воспользоваться такими программами, как gFTP, FOFF и FileZilla.

Как использовать протокол FTP , если вы предпочитаете Windows

В этом случае все гораздо проще, и вам подойдет любой FTP-клиент, который легко найти в сети. Из бесплатных наибольшей популярностью пользуются такие приложения, как FileZilla, FTPInfo, WinSCP. Соединение с помощью протокола FTP могут поддерживать и такие популярные файловые менеджеры, как Total Commander и FAR manager. Так что, если вы не так часто используете этот протокол, то ими вполне можно обойтись.

Ну а если просто разово понадобилось что-то скачать, то можно набрать в браузере вместо URL примерно такую команду:

ftp://user:[email protected]:port, в которой

site.at.domain - имя сервера,

port - номер порта для подключения (обычно это 21, и его можно пропустить).

Если нужно подключиться к анонимному FTP, то используется сокращенная запись команды:

ftp://host.at.domain:port

Бывает так, что при подключении по протоколу FTP возникают какие-либо проблемы. В этом случае есть смысл проверить настройки FireWall и антивируса.

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

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

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

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

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

FTP работает на прикладном уровне модели OSI и используется для передачи файлов с помощью TCP/IP. Для этого должен быть запущен FTP-сервер, ожидающий входящих запросов. Компьютер-клиент может связаться с сервером по порту 21. Это соединение (поток управления) остаётся открытым на время сессии. Второе соединение (поток данных), может быть открыт как сервером из порта 20 к порту соответствующего клиента (активный режим), или же клиентом из любого порта к порту соответствующего сервера (пассивный режим), что необходимо для передачи файла данных. Поток управления используется для работы с сессией - например, обмен между клиентом и сервером командами и паролями с помощью telnet-подобного протокола. Например, "RETR имя файла" передаст указанный файл от сервера клиенту. Вследствие этой двухпортовой структуры, FTP считается внешнеполосным протоколом, в отличие от внутриполосного HTTP.

Соединение и передача данных

Протокол определен в RFC 959. Сервер отвечает по потоку управления трехзначными ASCII-кодами состояния с необязательным текстовым сообщением. Например, "200" (или "200 ОК") означает, что последняя команда была успешно выполнена. Цифры представляют код ответа, а текст - разъяснение или запрос. Текущая передача по потоку данных может быть прервана с помощью прерывающего сообщения, посылаемого по потоку управления.

FTP может работать в активном или пассивном режиме, от выбора которого зависит способ установки соединения. В активном режиме клиент создаёт управляющее TCP-соединение с сервером и отправляет серверу свой IP-адрес и произвольный номер клиентского порта, после чего ждёт, пока сервер не запустит TCP-соединение с этим адресом и номером порта. В случае, если клиент находится за брандмауэром и не может принять входящее TCP-соединение, может быть использован пассивный режим. В этом режиме клиент использует поток управления, чтобы послать серверу команду PASV, и затем получает от сервера его IP-адрес и номер порта, которые затем используются клиентом для открытия потока данных с произвольного клиентского порта к полученному адресу и порту. Оба режима были обновлены в сентябре 1998 г. для поддержки IPv6. В это время были проведены дальнейшие изменения пассивного режима, обновившие его до расширенного пассивного режима.

При передаче данных по сети могут быть использованы четыре представления данных:

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

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

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

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

Для текстовых файлов предоставлены различные форматы управления и настройки структуры записи. Эти особенности были разработаны для работы с файлами, содержащими Telnet или ASA-форматирование.

Передача данных может осуществляться в любом из трёх режимов:

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

    Блочный режим - FTP разбивает данные на несколько блоков (блок заголовка, количество байт, поле данных) и затем передаёт их TCP.

    Режим сжатия - данные сжимаются единым алгоритмом (обыкновенно, кодированием длин серий).

Аутентификация

FTP-аутентификация использует обычную схему имя пользователя/пароль для предоставления доступа. Имя пользователя посылается серверу командой USER, а пароль - командой PASS. Если предоставленная клиентом информация принята сервером, то сервер отправит клиенту приглашение и начинается сессия. Пользователи могут, если сервер поддерживает эту особенность, войти в систему без предоставления учётных данных, но сервер может предоставить только ограниченный доступ для таких сессий.

Анонимный FTP

Хост, обеспечивающий FTP-сервис, может предоставить анонимный доступ к FTP. Пользователи обычно входят в систему как "anonymous" в качестве имени пользователя. Хотя обычно пользователей просят прислать адрес их электронной почты вместо пароля, никакой проверки фактически не производится. Многие FTP-хосты, предоставляющие обновления программного обеспечения, поддерживают анонимный доступ.

NAT - PT

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

NAT и обход брандмауэров

FTP обычно передает данные при наличии соединения сервера с клиентом, после того как клиент отправил команду PORT. Это создает проблему как для NAT, так и для брандмауэров, которые не разрешают соединения из интернета к внутренним хостам. Для NAT дополнительной проблемой является то, что представление IP-адресов и номера порта в команде PORT относится к IP-адресу и порту внутреннего хоста, вместо публичного IP-адреса и NAT-порта. Существует два подхода к этой проблеме. Первый заключается в том, что FTP-клиент и FTP-сервер используют команду PASV, которая вызывает соединение для передачи данных, установленное от клиента к серверу. Второй подход - изменение для NAT значений команды PORT с помощью шлюза на прикладном уровне.

Поддержка веб-браузерами

Большая часть обычных веб-браузеров может извлекать файлы, расположенные на FTP-серверах, хотя они могут не поддерживать расширения протоколов вроде FTPS. Когда указан FTP-адрес, а не HTTP-адрес, доступный контент на удалённом сервере представляется аналогично остальному веб-контенту. Полностью функциональный FTP-клиент может быть запущен в Firefox как расширение FireFTP.

Безопасность

FTP не разрабатывался как защищённый (особенно по нынешним меркам) протокол и имеет многочисленные уязвимости в защите. В мае 1999 авторы RFC 2577 свели уязвимости в следующий список проблем:

    Скрытые атаки (bounce attacks)

    Спуф-атаки (spoof attacks)

    Атаки методом грубой силы (brute force attacks)

    Перехват пакетов, сниффинг (packet capture, sniffing)

    Защита имени пользователя

    Захват портов (port stealing)

FTP не может зашифровать свой трафик, все передачи - открытый текст, поэтому имена пользователей, пароли, команды и данные могут быть прочитаны кем угодно, способным перехватить пакет по сети. Эта проблема характерна для многих спецификаций Интернет-протокола (в их числе SMTP, Telnet, POP, IMAP), разработанных до создания таких механизмов шифрования, как TLS и SSL. Обычное решение этой проблемы - использовать "безопасные", TLS-защищенные версии уязвимых протоколов (FTPS для FTP, TelnetS для Telnet и т.д.) или же другой, более защищённый протокол, вроде SFTP/SCP, предоставляемого с большинством реализаций протокола Secure Shell.

Безопасный FTP

Существует несколько методов безопасной передачи файлов, в одно или другое время называемых "Безопасным FTP": FTPS, SFPS, FTP через SSH.

Явный FTPS - расширение стандарта FTP, позволяющее клиентам требовать того, чтобы FTP-сессия была зашифрована. Это реализуется отправкой команды "AUTH TLS". Сервер обладает возможностью позволить или отклонить соединения, которые не запрашивают TLS. Это расширение протокола определено в спецификации RFC 4217. Неявный FTPS - устаревший стандарт для FTP, требующий использования SSL- или TLS-соединения. Этот стандарт должен был использовать отличные от обычного FTP порты.

SFTP, или «SSH File Transfer Protocol», не связан с FTP, за исключением того, что он тоже передаёт файлы и имеет аналогичный набор команд для пользователей. SFTP, или безопасный FTP, - это программа, использующая SSH (Secure Shell) для передачи файлов. В отличие от стандартного FTP он шифрует и команды, и данные, предохраняя пароли и конфиденциальную информацию от открытой передачи через сеть. По функциональности SFTP похож на FTP, но так как он использует другой протокол, клиенты стандартного FTP не могут связаться с SFTP-сервером и наоборот.

FTP через SSH (не SFTP )

FTP через SSH (не SFTP) относится к практике туннелирования обычной FTP-сессии через SSH-соединение. Поскольку FTP использует несколько TCP-соединений, туннелирование через SSH особенно затруднительно. Когда много SSH-клиентов пытаются установить туннель для канала управления (изначальное "клиент-сервер" соединение по порту 21), защищён будет только этот канал; при передаче данных программное обеспечение FTP на любом конце установит новые TCP-соединения (каналы данных), которые обойдут SSH-соединение и, таким образом, лишатся целостной защиты.

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

FTP через SSH иногда относят к безопасным FTP; но не стоит путать его с другими методами, такими как SSL/TLS (FTPS). Другие методы передачи файлов с помощью SSH и не связанные с FTP - SFTP и SCP; в каждом из них и учётные и файловые данные всегда защищены протоколом SSH.

FXP (англ. File eXchange Protocol - протокол обмена файлами) - способ передачи файлов между двумя FTP-серверами напрямую, не закачивая их на свой компьютер. При FXP-сессии клиент открывает два FTP-соединения к двум разным серверам, запрашивая файл на первом сервере, указывая в команде PORT IP-адрес второго сервера.

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

FXP стал использоваться злоумышленниками для атак на другие серверы: в команде PORT указывается IP-адрес и порт атакуемого сервиса на компьютере жертвы, и командами RETR/STOR производится обращение на этот порт от лица FTP-сервера, а не атакующей машины, что позволяло устраивать масштабные DDoS-атаки с использованием сразу многих FTP-серверов, либо обходить систему безопасности компьютера жертвы, если он полагается только на проверку IP клиента и используемый для атаки FTP-сервер находится в доверенной сети или на шлюзе. В результате сейчас практически все серверы проверяют соответствие IP-адреса, указанного в команде PORT, IP-адресу FTP-клиента и по умолчанию запрещают использование там IP-адресов третьих сторон. Таким образом, использование FXP невозможно при работе с публичными FTP-серверами.

Основные команды

    ABOR - Прервать передачу файла

    CDUP - Сменить директорию на вышестоящую.

    CWD - Сменить директорию.

    DELE - Удалить файл (DELE filename).

    EPSV - Войти в расширенный пассивный режим. Применяется вместо PASV.

    HELP - Выводит список команд, принимаемых сервером.

    LIST - Возвращает список файлов директории. Список передаётся через соединение данных.

    MDTM - Возвращает время модификации файла.

    MKD - Создать директорию.

    NLST - Возвращает список файлов директории в более кратком формате, чем LIST. Список передаётся через соединение данных.

    NOOP - Пустая операция

    PASV - Войти в пассивный режим. Сервер вернёт адрес и порт, к которому нужно подключиться, чтобы забрать данные. Передача начнётся при введении следующих команд: RETR, LIST и т.д.

    PORT - Войти в активный режим. Например PORT 12,34,45,56,78,89. В отличие от пассивного режима для передачи данных сервер сам подключается к клиенту.

    PWD - Возвращает текущую директорию.

    QUIT - Отключиться

    REIN - Реинициализировать подключение

    RETR - Скачать файл. Перед RETR должна быть команда PASV или PORT.

    RMD - Удалить директорию

    RNFR и RNTO - Переименовать файл. RNFR - что переименовывать, RNTO - во что.

    SIZE - Возвращает размер файла

    STOR - Закачать файл. Перед STOR должна быть команда PASV или PORT.

    SYST - Возвращает тип системы (UNIX, WIN, …)

    TYPE - Установить тип передачи файла (бинарный, текстовый)

    USER - Имя пользователя для входа на сервер

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

1. Заходим

По традиции, сразу начну с примера:

$ telnet example.ru 21
Trying 192.168.0.1...
Connected to example.ru.
Escape character is "^]".
220-Welcome to Pure-FTPd
You are user number 5 of 100 allowed.
Local time is now 17:41. Server port: 21.
220 You will be disconnected after 15 minutes of inactivity.
USER afiskon
331 User afiskon OK. Password required
PASS lamepassword
230-User afiskon has group access to: coders
230 OK. Current restricted directory is /

FTP-сервер обычно работает на 21 порту. В приведенном примере строки, начинающиеся с цифр, посылаются сервером, остальные — клиентом. Запросы клиента всегда состоят из одной строки формата КОМАНДА [аргументы] , в то время как ответы сервера могут содержать несколько строк.

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

Существует пять групп ответов сервера:

Как видно из примера, все начинается с посылки сервером кода 220. Затем пользователь должен залогиниться с помощью команд USER и PASS. Если все сделано правильно, на первую сервер ответит кодом 331, а на вторую — 230. Для анонимного входа (если он разрешен настройками сервера), в качестве имени пользователя следует указать «anonymous», а в качестве пароля — свой e-mail. На практике обычно посылается либо пустой e-mail, либо что-то типа [email protected].

Как видно, пароль передается в открытом виде, потому крайне желательно шифровать FTP-соединение с помощью SSL (это называется FTPS — FTP плюс SSL), а еще лучше — передавать файлы по SSH с помощью утилит scp, sftp или WinSCP . Первые две есть в любой unix-системе и используют для передачи файлов одноименные протоколы, работающие поверх SSH. WinSCP написан для Windows и внешне напоминает Total Commander, умеет работать как с устаревшим SCP (Secure Copy), так и SFTP (SSH File Transfer Protocol), появившимся только в SSH-2.

2. Осматриваемся

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

Команда Ожидаемый код Описание
DELE 250 Удалить файл
RMD 250 Удалить директорию
CWD 250 Перейти в директорию
MKD 257 Создать директорию
PWD 257 Узнать текущую директорию
QUIT 221 Закончить работу
TYPE 200 Установить тип передачи
PORT 200 Перейти в активный режим
PASV 227 Перейти в пассивный режим
LIST 150, 226 Получить содержимое каталога
RETR 150, 226 Скачать файл
STOR 150, 226 Залить файл
ABOR 426,226 Отменить передачу
RNFR 350 Выбрать файл для переименования
RNTO 250 Переименовать файл

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

Самые простые команды — это QUIT, DELE, MKD, CWD и RMD . Просто командуем и проверяем код, возвращаемый сервером. Если он равен ожидаемому, значит все ОК, если нет — обрабатываем ошибку.

MKD ftp_test
257 "ftp_test" : The directory was successfully created
CWD ftp_test
250 OK. Current directory is /ftp_test
CWD ..
250 OK. Current directory is /
RMD ftp_test
250 The directory was successfully removed

Если бы я писал FTP-клиент, то код, отвечающий за выполнение названных команд, выглядел бы примерно так:

int code;
char * dir;
// ...
if (code = rawcmd(250 , "RMD %s\r \n " , dir) )
printf ("Error: %d\n " , code) ;
else
printf ("All done!\n " ) ;

Чуть сложнее с парсингом ответа сервера на команду PWD :

PWD
257 "/ftp_test" is your current location

Текущая директория передается в единственной (последней?) строке ответа сервера, заключенная в двойные кавычки. Если полное имя текущей директории содержит двойные кавычки, они заменяются на две кавычки:

PWD
257 "/ftp""test" is your current location

Для переименования файлов используется пара команд — RNFR и RNTO :

RNFR old_file.zip
350 Are you kidding?
RNTO new_file.zip
250 Done!

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

Команда TYPE позволяет установить режим передачи файлов. Пример:

TYPE E
200 TYPE is now EBCDIC
TYPE A
200 TYPE is now ASCII
TYPE I
200 TYPE is now 8-bit binary

Насколько я могу судить, сегодня эта команда уже устарела и все данные можно спокойно передавать в бинарном формате (TYPE I). Цитата из Википедии :

Первые компьютеры использовали формат, размером в байт, машинное слово, двойное машинное слово, не кратное 8. Обычно они были кратны шести. Восемь бит в байте было принято при разработке системы машинных команд для IBM System/360. Это стало международным стандартом и с начала 1970-х большинство компьютеров использует байты, состоящие из 8 бит, и машинные слова, кратные 8.

3. Действуем

Особенность протокола FTP — для выполнения команд и передачи файлов используются разные соединения. Это в общем-то нормальное проектное решение. Мы же не знаем, что там в этих файлах записано, а если передавать их вместе с командами, придется как-то кодировать содержимое файла, чтобы отличить его от команд. Зачем увеличивать объем трафика и усложнять протокол, когда можно просто открыть новое соединение и послать файл, как есть?

При установлении нового соединения кто-то должен собственно соединяться, а кто-то соединение принимать. Если клиент открывает порт, а сервер коннектится к нему, режим передачи файла называется активным. В обратном случае — пассивным. За счет того, что многие пользователи Интернета сегодня сидят за NAT, обычно используется пассивный режим. И это не очень хорошо, потому что число портов у сервера ограничено.

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

Для перехода в пассивный режим используется команда PASV , для перехода в активный — PORT :

PORT 192,168,10,1,21,133
200 PORT command successful
PASV
227 Entering Passive Mode (192,168,0,1,21,216)

Как несложно догадаться, с помощью цифр кодируется IP-адрес и порт для соединения. Допустим, мы находимся в пассивном режиме и хотим установить соединение для передачи данных:

$ telnet 192.168.0.1 `expr 21 \* 256 + 216`
Trying 192.168.0.1...
Connected to example.ru.
Escape character is "^]".

После чего можем, например, просмотреть содержимое текущего каталога, заюзав команду LIST :

LIST
150 Accepted data connection
226-Options: -a -l
226 5 matches total

Смотрим на вывод telnet:

drwx------ 5 afiskon coders 512 Jul 7 11:35 .
drwx------ 5 afiskon coders 512 Jul 7 11:35 ..
drwxr--r-- 3 afiskon coders 512 Jun 6 14:30 сайт
drwxr-xr-x 2 afiskon coders 1024 Jul 7 00:16 logs
drwxr--r-- 2 afiskon coders 512 Jun 6 14:30 tmp
Connection closed by foreign host.

Абсолютно аналогично происходит скачивание и аплоад файлов, только используются команды RETR {файл} и STOR {файл} соответственно. Команды RETR, STOR и LIST можно прервать в процессе выполнения с помощью команды ABOR , в ответ на которую сервер должен ответить 426 «передача прервана», а затем — 226 «отмена операции произошла успешно».

4. Заключение

На этом я, пожалуй, закончу свое повествование. Получилось 9 Кб текста против 130 Кб RFC959 . По этой статье вполне можно написать несложный FTP клиент или сервер, я проверял! Самое главное — это протестировать его на совместимость с максимально возможным количеством ПО, поскольку, как я уже отмечал, в мире FTP мало кто строго следует RFC. Ну и последнее — помните золотое правило «Be liberal with input, strict with output».


Top