FTP (англ. File Transfer Protocol — протокол передачи файлов) — протокол, предназначенный для передачи файлов в компьютерных сетях. FTP позволяет подключаться к серверам FTP, просматривать содержимое каталогов и загружать файлы с сервера или на сервер; кроме того, возможен режим передачи файлов между серверами (см. FXP).
FTP является одним из старейших прикладных протоколов, появившимся задолго до HTTP, в 1971 году. До начала 90-х годов на долю FTP приходилось около половины трафика в сети Интернет[источник не указан 52 дня]. Он и сегодня широко используется для распространения ПО и доступа к удалённым хостам.
Протокол FTP относится к протоколам прикладного уровня и для передачи данных использует транспортный протокол TCP. Команды и данные, в отличие от большинства других протоколов передаются по разным портам. Порт 20 используется для передачи данных, порт 21 для передачи команд.
Протокол не шифруется, при аутентификации передаёт логин и пароль открытым текстом. Если злоумышленник находится в одном сегменте сети с пользователем FTP, то, используя сниффер,
он может перехватить логин и пароль пользователя, или, при наличии
специального ПО, получать передаваемые по FTP файлы без авторизации.
Чтобы предотвратить перехват трафика, необходимо использовать протокол
шифрования данных SSL, который поддерживается многими современными FTP-серверами и некоторыми FTP-клиентами.
Процесс нешифрованной авторизации проходит в несколько этапов (символы \r\n означают перевод строки):
Установка TCP-соединения с сервером (обычно на 21 порт) Посылка команды USER логин\r\n Посылка команды PASS пароль\r\n
Если к серверу разрешён анонимный доступ (как правило, лишь для
загрузки данных с сервера), то в качестве логина используется ключевое
слово "anonymous" или "ftp", а в качестве пароля — адрес электронной почты:
USER anonymous\r\n PASS someone@email\r\n
После успешной авторизации можно посылать на сервер другие команды.
Основные команды
- ABOR - Прервать передачу файла
- CDUP - Сменить директорию на вышестоящую.
- CWD - Сменить директорию.
- DELE - Удалить файл (DELE filename).
- HELP - Выводит список команд принимаемых сервером.
- LIST - Возвращает список файлов директории. Список передается через соединение данных (20 порт).
- MDTM - Возвращает время модификации файла.
- MKD - Создать директорию.
- NLST - Возвращает список файлов директории в более кратком формате
чем LIST. Список передается через соединение данных (20 порт).
- 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 - Установить тип передачи файла(Бинарный, текстовый)
Пример
220 FTP server ready. USER ftp //Анонимус 230 Login successful. PASV 227 Entering Passive Mode (192,168,254,253,233,92)//Клиент должен открыть соединение на переданный IP LIST 150 Here comes the directory listing. //Сервер передает список файлов в директории 226 Directory send OK. CWD incoming 250 Directory successfully changed. PASV 227 Entering Passive Mode (192,168,254,253,207,56) STOR gyuyfotry.avi 150 Ok to send data. //Клиент передает содержимое файла 226 File receive OK. QUIT 221 Goodbye.
На многих FTP-серверах существует каталог (под названием incoming,
upload и т. п.), открытый на запись и предназначенный для закачки
файлов на сервер. Это позволяет пользователям наполнять сервер свежими
данными.
Изначально протокол предполагал встречное TCP-соединение от сервера
к клиенту для передачи файла или содержимого каталога. Это делало
невозможным общение с сервером, если клиент находится за IP NAT, кроме того, часто запрос соединения к клиенту блокируется файерволом.
Чтобы этого избежать, было разработано расширение протокола FTP passive
mode, когда соединение для передачи данных тоже происходит от клиента к
серверу. Кроме того, этой проблемы можно избежать, если использовать прокси-сервер (именно FTP прокси-сервер).
Специально для работы FTP протокола через межсетевые экраны , было
сделано расширение NAT, называемое NAT-PT (rfc2766), позволяющее
транслировать входящие соединения от сервера к клиенту через NAT. В
процессе такого соединения NAT подменяет передаваемые данные от клиента
указывая серверу истинный адрес и порт с которым сможет соединиться
сервер, а потом транслирует соединение от сервера от этого адреса,
клиенту на его адрес. Несмотря на все меры и нововведения принятые для
поддержки FTP протокола, на практике функция NAT-PT обычно отключается
во всех роутерах и маршрутизаторах с целью обеспечения дополнительной
безопасности от вирусных угроз.
FXP
FXP (англ. File eXchange Protocol — протокол обмена файлами) — способ передачи файлов между двумя FTP сайтами напрямую, не закачивая их на свой компьютер
. При FXP сессии, клиент открывает два FTP соединения к двум разным
сайтам, запрашивая пакеты данных у первого сайта как будто бы от имени
второго. Польза этого метода в том, что можно перекачивать файлы по
сети с огромной скоростью, обладая низкоскоростным соединением. Это
свойство протокола FTP обнаружили и стали использовать ещё до появления
файлообменных программ (p2p).
Несомненным преимуществом поддержки стандарта FXP является то, что
на конечных пользователей, желающих скопировать файлы с одного
FTP-сервера на другой, уже не действует ограничение пропускной
способности их собственного интернет-соединения. Нет необходимости
скачивать себе файл, чтобы потом положить его на другой FTP-сервер.
Таким образом, время передачи файлов будет зависеть только от скорости
соединения между двумя удаленными FTP-серверами, которая в большинстве
случаев заведомо больше "пользовательской".
К сожалению, использование стандарта FXP налагает на FTP-серверы и
на пользователей, некоторые ограничения. Во-первых, оба сервера должны
поддерживать режим PASV и позволять выполнять команды PORT иностранным
хостам, а во-вторых, передача данных невозможна в том случае, когда оба
сервера находятся под управлением операционных систем семейства Windows
(например, Windows NT или Windows 2000). Возможность пересылать файлы
напрямую с одного FTP-сервера на другой появляется только при условии,
что хотя бы один из них управляется UNIX-подобной системой.
|