Перейти к содержимому

Ftp протокол какого уровня

  • автор:

Сетевые протоколы: базовые понятия и описание самых востребованных правил

Рассказываем о самых часто используемых правилах взаимодействия устройств в сети.

Эта инструкция — часть курса «Как работают сетевые протоколы».

Смотреть весь курс

Изображение записи

В мире существует более 7 000 протоколов, и их число продолжает расти. Рассказываем о самых часто используемых правилах взаимодействия устройств в сети.

Понятие протокола сети

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

Для взаимодействия протоколов между собой существует модель OSI, или Open Systems Interconnection. Дословно название переводится как «взаимодействие открытых систем».

OSI — эталонная модель взаимодействия устройств в сети

Модель OSI — это модель, позволяющая разным системам связи коммуницировать между собой по общепринятым стандартам. Ее можно сравнить с английским, то есть глобальным, универсальным языком в мире сетей.

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

семь уровней модели OSI

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

Модель OSI является эталонным стандартом, но на данный момент она устарела, поскольку современные протоколы работают сразу на нескольких уровнях модели OSI. На смену модели OSI пришла модель TCP/IP, на основе которой работает большая часть устройств в современном мире.

TCP/IP — модель, на которой работает сеть Интернет

Модель TCP/IP помогает понять принцип работы и взаимодействия узлов в сети Интернет. Ее название включает в себя два основных протокола, на которых построен интернет. TCP/IP расшифровывается как Transmission Control Protocol/Internet Protocol, или протокол управления передачей (данных)/интернет-протокол.

Модель используется во всем современном интернете, новые сетевые протоколы разрабатываются с опорой на модель TCP/IP. Например, подключаясь к сайту Selectel, вы используете протоколы IP, TCP и HTTPS, которые работают в рамках упомянутой модели.

сравнение моделей

Подробнее о модели TCP/IP можно прочитать в блоге.

Далее мы рассмотрим основные протоколы межсетевого, транспортного уровней, а также уровня приложений. Именно с ними мы сталкиваемся чаще всего, анализируя какие-либо проблемы в сети или на сервере.

Протоколы транспортного уровня: краткое описание

Интернет-протокол и IP-адреса

Internet Protocol (IP) — это наиболее простой протокол, объединивший отдельные компьютеры в глобальную сеть. Главной его задачей является маршрутизация дейтаграмм — определение маршрута следования пакетов по узлам сети. Каждое устройство — ваш ПК, принтер и т.д. — имеет IP-адрес, чтобы данные попадали к нужному адресату. Так, например, отправленный на печать файл не окажется вместо принтера в личном ПК вашего коллеги.

В качестве минусов протокола можно отметить низкую надежность. Он не определяет факт передачи пакета и не контролирует целостность данных. IP просто осуществляет пересылку.

Для пересылки пакетов необходимо определить, на какой порт отправить пакет. Для этого протокол имеет свою систему адресации. В качестве адресов выступает 32-битные (IPv4) или 128-битные (IPv6) адреса. Перед отправкой пакета в него добавляются header (заголовок) и payload (данные для доставки).

IPv4 является 32-разрядной системой, состоящей из четырех разделов (123.123.123.123). Он поддерживает до 4 294 967 296 адресов и является протоколом по умолчанию. Основным его преимуществом является простота. В недостатках — ограниченное адресное пространство, также называемое «исчерпанием адресов».

IPv6, напротив, — 128-битное адресное пространство, которое обеспечивает приблизительно 2^128 степени адресов. Формат записи состоит из восьми разделов, в каждый из которых записывается четыре 16-ричных цифры. Недостаток протокола — в сложности сетевого администрирования. При аренде сервера или виртуальной машины в Selectel выдается IPv4, однако можно запросить и IPv6-адреса, в облаке на базе VMware выдаются только IPv4-адреса.

Один из основных протоколов, который работает поверх IP, — это протокол TCP, из-за чего его часто обозначают как TCP/IP. Но это не единственный протокол, который является частью интернет-протокола.

TCP — протокол обмена сообщениями в сети Интернет

TCP помогает устройствам в сети обмениваться сообщениями. Он работает на четвертом, транспортном, уровне модели OSI.

Для передачи информации происходит дробление исходного файла на части, которые передаются получателю, а далее собираются обратно. Например, человек запрашивает веб-страницу, далее сервер обрабатывает запрос и высылает в ответ HTML-страницу при помощи протокола HTTP. Он, в свою очередь, запрашивает уровень TCP для установки требуемого соединения и отправки HTML-файла. TCP конвертирует данные в блоки, передавая их на уровень TCP пользователя, где происходит подтверждение передачи.

Свойства протокола TCP:

структура пакета

  1. Система нумерации сегментов (Segment Numbering System). TCP отслеживает передаваемые или принимаемые сегменты, присваивая номера каждому из них. Байтам данных, которые должны быть переданы, присваивается определенный номер байта, в то время как сегментам присваиваются порядковые номера.
  2. Управление потоком. Эта функция ограничивает скорость, с которой отправитель передает данные. Это делается для обеспечения надежности доставки. Получатель постоянно сообщает отправителю о том, какой объем данных может быть получен.
  3. Контроль ошибок. Данная функция реализуется для повышения надежности путем проверки байтов на целостность.
  4. Порт источника и порт назначения. Протокол TCP использует специальные порты для связи различных протоколов. Например протокол SSH использует 22й порт, HTTP — 80, HTTPS — 443, Gopher — 70. Все порты делятся на три диапазона — общеизвестные (0—1023), зарегистрированные (1024—49151) и динамические (49152—65535).

UDP — аналог TCP: описание отличий в поведении протокола в сети

В отличие от протокола ТСР User Datagram Protocol обеспечивает передачу данных без получения подтверждения от пользователя о результате действия. Благодаря этому достигается большая скорость работы и передачи данных в ущерб надежности и безопасности.

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

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

заголовок UDP

Протокол UDP любят злоумышленники при организации DDOS — или DOS-атак. Из-за того, что данный протокол не требует подтверждения от сервера, открывается возможность просто «залить» сервер запросами. Стандартная атака подразумевает отправку большого количества дейтаграмм. Это заставляет сервер отвечать на каждый из них, расходуя вычислительные мощности.

SCTP — протокол передачи управления потоком

Еще один протокол, который относится к транспортному уровню. SCTP обеспечивает надежную последовательную передачу данных. Поддерживает многоадресное соединение, когда один или оба конечных узла могут состоять из более чем одного IP-адреса. Это обеспечивает прозрачное переключение между резервными сетевыми путями.

SCTP аналогичен протоколам UDP и TCP, которые обеспечивают функции транспортного уровня для некоторых интернет-приложений. Так как преимущество протокола SCTP — в быстром переключении между интерфейсами, на него переходят только компании, для которых критична недоступность приложений. SCTP работает поверх бесконтактной пакетной сети, такой как IP, и поддерживает передачу данных в случаях с одним или несколькими IP.

RTP — транспортный протокол реального времени

Real-time Transfer Protocol — это протокол, который используется при передаче потокового аудио и видео и применяется при передаче голоса преимущественно в IP-телефонии. RTP применяется в совокупности с протоколом управления RTCP. Когда RTP транслирует медиа, RTCP применяется при анализе статистик QoS (Quality of Service) и обеспечивает синхронизацию разных потоков. RTP отправляется и принимается с помощью четных номеров портов, а RTCP использует нечетные номера.

Также протокол считают главным стандартом, применяемым при передаче аудио и видео по IP-сети. Поскольку RTP может осуществлять ее нескольким конечным адресатам одновременно при помощи многоадресной IP-рассылки.

Протоколы межсетевого уровня: краткое описание

ICMP — протокол управляющих сообщений в сети

Задача протокола — диагностика проблем при взаимодействии устройств. Он определяет, достигли ли данные места назначения или нет.

Основная цель ICMP — сообщать об ошибках. Если какие-либо данные не попали по назначению, ICMP генерирует ошибки для обмена с отправляющим устройством. Например, если объем передаваемых данных слишком велик для маршрутизатора, маршрутизатор отбросит пакет и отправит ICMP-сообщение исходному источнику данных.

Как и в случае UDP, протокол ICMP можно использовать для сетевых атак, таких как ICMP flood и ping of death, где главный прием — генерация большого количества ICMP-сообщений.

OSPF — протокол маршрутизации состояния канала сети

Open Shortest Path First используется для поиска наилучшего пути между исходным и конечным маршрутизатором. Работает на межсетевом уровне модели OSI.

После настройки OSPF будет анализировать соседние маршрутизаторы и собирать все доступные данные о состоянии канала для построения топологической карты всех доступных путей в своей сети. Затем он сохранит информацию в своей базе данных топологии, также известной как База данных состояния канала (LSDB).

На основе собранной информации он вычислит наилучший кратчайший путь к каждой доступной подсети/сети, используя алгоритм под названием Shortest Path First (SFP).

Протоколы прикладного уровня: краткое описание

FTP — протокол передачи данных в сети

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

Описание работы протокола в сети Интернет

Пользователю нужно войти на FTP-сервер. Здесь нужно учитывать, что некоторые серверы разрешают доступ к части или всем своим данным без авторизации. Это называется «анонимным FTP». При этом файлы с сервера можно будет только передавать на компьютер клиента.

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

FTP-сессии работают в двух режимах — активном и пассивном:

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

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

DNS — справочник сети Интернет

Браузеры взаимодействуют между собой через IP-адреса. Люди, пытаясь подключиться к сайту, используют его доменное имя — например, https://selectel.ru/. Domain Name System преобразует домены в IP-адреса, чтобы сделать возможной загрузку интернет-ресурса через браузер. Каждому устройству в сети назначается свой IP-адрес, который используется другими устройствами для подключения к нему, а DNS-сервер позволяет людям не запоминать их.

На данный момент существуют четыре основных DNS-сервера, которые участвуют в загрузке веб-страниц:

  • DNS recursor — своеобразный справочник, отвечающий за прием запросов от компьютеров пользователей, например, приложений браузеров;
  • Root nameserver, или корневой сервер, является первым в процессе конвертации имени хоста в IP-адрес и позволяет получить список DNS-серверов.
  • TLD nameserver — следующий шаг при поиске IP; хранит информацию про все доменные имена с общим расширением (.ru, .com и т.д.);
  • Authoritative nameserver дает окончательные ответы на запросы о DNS.

Бесплатный DNS-хостинг от Selectel

Размещайте домены и записи на наших DNS-серверах. Запуск за несколько минут.

HTTP(S) — протокол передачи гипертекста

HTTP является основой интернета и используется для загрузки веб-страниц с использованием гипертекстовых ссылок. Относится к прикладным протоколам и работает поверх других уровней стека сетевых протоколов.

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

  • версию HTTP,
  • URL-адрес,
  • метод HTTP-запроса — указание на ожидание запроса от сервера (например, PUT- и GET-запросы),
  • заголовок — он передает основную информацию о запросе и содержит пары ключ-значение,
  • тело запроса (опционально, это любая отправляющаяся информация).

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

Код состояния HTTP-запроса — это трехзначные коды, которые, как правило, указывают на успешность его выполнения. Они разбиваются на пять основных блоков:

  1. 1xx* Информация (Informational),
  2. 2хх Успешность выполнения (Success),
  3. 3хх Перенаправление (Redirection),
  4. 4xx Ошибка клиента (Client Error),
  5. 5xx Ошибка сервера (Server Error),

*ХХ обозначают цифры от 00 до 99.

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

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

SSH — основное средство подключения к серверам

SSH, или Secure Shell, — это защищенный протокол, который используется как основное средство подключения к серверам. С помощью него при подключении к серверу пользователь входит в уже существующую учетную запись, где выполняются все отправленные команды.

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

В панели управления Selectel пользователь может загрузить собственный SSH-ключ для повышения надежности и безопасности подключения или сгенерировать его на месте. Подробнее — в нашей базе знаний.

Устаревшие протоколы: Telnet, Gopher, FTP

На сегодняшний день существует более 7 000 тысяч различных протоколов. Сеть постоянно развивается, поэтому некоторые протоколы устаревают — например, Gopher, FTP, Telnet. Последний рассмотрим подробнее.

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

Заключение

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

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.» — «Регистрация прошла успешно».

Все, теперь наши действия зависят от того что мы хотим, а как говорилось выше, хотим мы получить с сервера файл, пусть к примеру это будет файл «HIDE.EXE», расположенный в корневом каталоге сервера. Перед тем, как осуществлять прием или передачу данных серверу необходимо указать какой тип данных будет передаваться, делается это командой TYPE N, где N = «A», если тип ASCII и N = «I», если файл бинарный. Клиент посылает серверу команду TYPE I, на что получает ответ – «200 Switching to Binary mode.».

Итак, осталось только получить файл. Для этого клиенту необходимо открыть соединение данных. Клиентом выбирается свободный порт, осуществляется пассивное открытие, т.е. клиент его «слушает». Дальше клиенту нужно сообщить серверу свой 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-протокол и работу с ним в разных операционных системах.

Эта инструкция — часть курса «Как работают сетевые протоколы».

Смотреть весь курс

Изображение записи

File Transfer Protocol, или протокол передачи файлов, — это протокол, относящийся к прикладному уровню и отвечающий за передачу данных между двумя системами. Как и протокол HTTP, он работает поверх протокола TCP. При передаче файлов FTP использует одновременно два TCP-канала: один из них отвечает за управление передачей данных, а второй — передает их.

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

Передача файлов FTP-протоколом между клиентом и сервером

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

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

Командный канал требуется для:

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

Протокол FTP применяет тот же подход, что TELNET и SMTP, для связи посредством управляющего соединения. Для этого используется набор символов NVT ASCII. Общение осуществляется через порт 21.

Канал данных используется непосредственно для передачи информации и работает через порт 20.

FTP-клиент, применяя URL в качестве адреса (как и протоколы передачи гипертекста HTTP/S), посылает команду FTP и адрес клиента. После установки соединения пользователь выполняет авторизацию, вводя логин и пароль.

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

Как выглядит FTP в графическом интерфейсе ОС

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

Интерфейс в Windows

При работе через приложение взаимодействие с файлами становится гораздо проще благодаря понятности и удобства интерфейса. На скриншоте ниже — пример интерфейса приложения FileZilla:

Приложение FileZilla

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

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

! Эта команда переключает вас между операционной системой и FTP. Вернувшись в операционную систему и набрав exit, вы вернетесь в командную строку FTP
? Открывает экран справки
append Добавляет текст в локальный файл
cd Изменяет удаленный рабочий каталог
delete Удаляет файл
disconnect Выход из FTP
get Получение файла с удаленного компьютера
mdelete Множественное удаление
mdir Перечисляет содержимое нескольких удаленных каталогов
mget Получение нескольких файлов
mkdir Создание каталога
mls Списки содержимого нескольких удаленных каталогов
mput Отправка нескольких файлов
open Открывает адрес
put Отправить один файл
pwd Печатает рабочий каталог
quit Выход из FTP
recv Получение файла

Больше — по ссылке. Те же команды актуальны для работы в ОС Linux.

Какие сервисы лучше использовать для FTP-протокола

  • FileZilla — это бесплатная FTP-утилита с открытым исходным кодом, которая дает пользователю возможность передавать файлы с локального компьютера на удаленный. FileZilla доступна в виде клиентской и серверной версий. Работает под ОС Windows, MacOS и Linux.
  • WinSCP — это бесплатный SFTP-, WebDAV-, S3-, SCP- и FTP-клиент для Windows с открытым исходным кодом. Работает только на ОС Windows.
  • Cyberduck — это FTP-клиент с бесплатными облачными возможностями и поддержкой систем Windows и Mac OS X. Cyberduck использует графический интерфейс пользователя (GUI) для предоставления доступа к файлам с серверов и для иного управления данными в различных местах, включая их редактирование и хранение.
  • Transmit — это приложение для MacOS, позволяющее работать с FTP, SFTP и множеством других протоколов. Отличается удобным дизайном и высокой скоростью работы.
  • CrossFTP — это приложение для ОС Windows, MacOS и Linux, поддерживающее множество протоколов, включая WebDav, SFTP, Amazon S3 и прочие.
  • Nautilus — это менеджер файлов для ОС Linux, работающих на основе окружения Gnome. Основным его плюсом является то, что он уже встроен в систему. Позволяет работать с протоколами FTP(S), SMB, NFS, SSH и прочими.
  • AndFTP — популярный FTP-клиент для ОС Android. Обладает несколько нагруженным интерфейсом, однако он дает пользователю те же функции, что и полноценные десктопные приложения.
  • X-plore File Manager — это FTP-клиент для ОС Android, аналог AndFTP.
  • FTP-manager — это FTP-клиент для iOS, позволяющий копировать, перемещать и удалять файлы между устройством и сервером. Плюсами данного приложения является возможность использовать многооконность на iPad, просматривать различные типы файлов на устройстве, а также вносить изменения в код через специальный редактор.

В чем назначение безопасного FTP-протокола

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

Однако существует несколько общих принципов, позволяющие обеспечить безопасное использование протокола, — FTPS и SFTP.

FTPS

FTPS, или FTP с использование Secure Socket Layer, — это метод, который позволяет выполнять шифрование соединения по требованию пользователя. FTPS был предложен в качестве альтернативы в RFC 2228.

FTPS был введен на серверах Windows, начиная с IIS 7.0. IIS, или Internet Information Services, — набор инструментов Windows, позволяющих развертывать web-сервер.

В IIS 7.0 FTPS-протокол был автономным дополнительным элементом и требовал отдельной загрузки. IIS 7.5 и каждая последующая версия имеют функциональность FTPS из «коробки». Следовательно, чтобы настроить безопасное FTP-соединение, необходимо установить только IIS Manager и/или FTP-сервис, который входит в пакет IIS.

Как работает FTPS

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

Сессия FTPS аутентифицируется при помощи логина, пароля и сертификата открытого ключа (аналогично тому, как работает HTTPS). Инструменты, такие как OpenSSL, позволяют запрашивать и создавать сертификат ключа. При соединении с сервером FTPS клиент сначала проверяет надежность сертификата сервера, после чего осуществляет подключение. Когда доверенный центр сертификации (CA) подписывает эти сертификаты, он гарантирует, что клиент подключен к надежному и безопасному серверу. Это помогает защититься от ряда атак, в том числе от атак посредника.

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

FTPS (через SSL) использует сертификаты X.509 для аутентификации. Эти цифровые сертификаты содержат в себе открытый ключ шифрования и информацию о том, кто является его владельцем. Открытый ключ выполняет две основные функции: проверку подлинности и шифрование данных. Открытый ключ имеет связанный с ним закрытый ключ. Он находится отдельно от открытого ключа, и его главное предназначение — расшифровка сообщений, зашифрованных при помощи открытого ключа.

SFTP

Также для обеспечения безопасности соединения существует SFTP, или SSH (Secure Shell) FTP, — это протокол прикладного уровня модели OSI. Он является частью SSH и не относится к протоколу FTP напрямую. При его работе происходит шифрование данных при помощи SSH, установка соединения осуществляется через порт 22. Это отличает его от FTPS, который осуществляет открытие порта каждый раз при взаимодействии с файлом. Аутентификация может происходить как при помощи логина и пароля, так и при помощи SSH-ключа.

Как создать сетевой FTP-протокол для Windows

Шаг 1. Активация встроенного в ОС FTP-протокола

Для создания FTP-сервера на Windows потребуется выполнить несколько действий.

Мы сделаем это через Панель управления. Найдите ее в режиме поиска.

Панель управления в Windows

Далее перейти в пункт Программы → Программы и компоненты:

В открывшемся окне следует нажать на пункт Включение или отключение компонентов Windows:

Настройка FTP-сервера

Далее в списке найдите пункт Службы IIS и включите пункты FTP-сервер (Расширяемость FTP и Служба FTP), а также пункт Сценарии и средства управления IIS:

Выбор пунктов в списке

Шаг 2. Создание сервера

Для создания собственного сервера следует перейти на главную страницу Панель управления, выбрать раздел Система и безопасность, где выбрать пункт Администрирование:

Создание сервера

Далее требуется выбрать Диспетчер служб IIS ( если он не появляется, отметьте все поля в Службы IIS и перезагрузите компьютер):

Выберите диспетчер служб IIS

В левой части окна нажмите правой кнопкой мыши и выберите Добавить веб-сайт. У вас появится следующее окно:

Добавить веб-сайт

Далее нажмите правой кнопкой мыши по созданному сайту и выберите Добавить FTP-публикацию:

Добавить FTP-публикацию

После этого заполните поля в соответствии с вашими требованиями, указав порт 21:

Заполняем поля для добавления публикации

Сведения о проверке подлинности и авторизации

Как создать FTP-сервер на Linux

Для создания FTP-сервера на Linux (дистрибутив Ubuntu) следуйте данному алгоритму:

  1. Обновление ОС. Для выполнения этого шага введите следующую команду: sudo apt update.
  2. Установка vsftpd (FTP-сервера). Для выполнения введите следующую команду: sudo apt intall vsftpd.
  3. Проверка работоспособности сервера. Для этого введите следующую команду: sudo systemctl status vsftpd. В случае успешной установки в терминале будет выведено active (running).
  4. Добавление службы в автозагрузку. Для выполнения используйте следующую команду: sudo systemctl enable vsftpd.

Создайте FTP-сервер на мощностях Selectel

Более 100 фиксированных конфигураций с готовностью — 2 минуты.

А что с MacOS?

С компьютерами на MacOS ситуация обстоит несколько другим образом. Начиная с MacOS Sierra (вышла в 2016 г.) сервис FTP был полностью удален из ОС.

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

Разница работы с FTP и HTTP

Мы уже упоминали об этих двух протоколах в контексте статьи. Оба работают поверх TCP — самого известного транспортного протоколы. Тем не менее между ними много различий. Рассмотрим основные.

HTTP FTP
Это набор правил, по которым веб-страницы передаются на разные компьютеры через интернет Это набор правил, разрешающих загрузку и скачивание файлов на компьютер через интернет
Поддерживает только одно соединения — для передачи данных. Поддерживает соединение как для передачи данных, так и для управления (использует два соединения)
Использует протокол управления передачей и работает на TCP-порту 80 Использует протокол управления передачей и работает на TCP-портах 20 и 21
URL-адрес будет начинаться с HTTP URL-адрес будет начинаться с FTP
Не требует аутентификации Требует аутентификации, но позволяет подключаться анонимно
Эффективен при передаче небольших файлов. Эффективен при передаче больших файлов
Файлы, переданные на компьютер через интернет, не сохраняются в памяти (диск) Файлы, переданные на компьютер через интернет, сохраняются в памяти
HTTP используется для предоставления веб-страниц веб-браузеру с веб-сервера FTP используется для загрузки или скачивания файлов между клиентом и сервером
Request for Comments: 2616, 7230, 7231 Request for Comments: 959, 765, 1732
HTTP быстрее FTP медленнее по сравнению с HTTP

Нужен ли FTP-протокол в наши дни

В завершение описания FTP-протокола добавим, для чего используется протокол в наши дни. Хоть он и является удобным средством для обмена данными, возраст протокола и уязвимость в плане информационной безопасности берут свое. На данный момент он уступает более защищенным версиям FTP, таким как SFTP.

Доказательством этого становятся отказы от использования протокола. Как это сделали MacOS или браузер Chrome, разработчики которого удалили поддержку протокола в версии Chrome 95. Впрочем, FTP все еще остается востребованным для локальных целей, а также для доступа к различных старым интернет-архивам.

В чем разница протоколов HTTP и HTTPS

Что такое FTP: как подключиться, программы для доступа

Как просто скопировать на компьютере файл из папки в папку! А если нужно скопировать файл… на ваш сайт? Как это сделать?

На помощь приходит протокол передачи файлов, который уже полсотни лет исправно служит всем, кому нужно получить или передать данные на удаленные сервера.

Что такое FTP

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

Читайте также:
Гайд по технической оптимизации сайта

Разница между доступом по FTP и HTML

Почему же не передают файлы по протоколу HTML, ведь мы мы делаем это через социальные сети и мессенджеры чуть ли не каждый день?

Хотя и тут интерфейс похож на «Проводник» Windows

  1. Для FTP не нужен web-интерфейс. То есть не нужно развертывать среду (например, CMS) и настраивать в ней шаблоны отображения папок и файлов. По FTP пользователь получает доступ к удаленной папке и выглядит она так, как будто бы расположена на локальном компьютере. Пользователь видит файлы и может совершать с ними манипуляции (копировать, вырезать, редактировать и удалять). В интернете же (возьмем для примера Яндекс. Диск) у каждой системы своя собственная структура папок и функционал для получения ссылок на файлы.
  2. FTP имеет системы делегирования прав и авторизации «из коробки». В вебе все это нужно будет создавать: например, в WordPress подключать плагины доступа и дорабатывать их настройки. Или пойти еще дальше и самостоятельно конфигурировать папки.
  3. FTP предоставляет разграничение прав доступа, чтобы одни пользователи могли выгружать файлы на сервер, а другим это было запрещено. В вебе же загрузка файлов может быть сложной и многоступенчатой процедурой.

Читайте также:
Подробный гайд по оптимизации сайта на WordPress

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

Far Manager

Год создания: 1996

Актуальная версия: 3.0.5888

Внешний вид Far Manager

Что собой представляет

Один из старейших файловых менеджеров с DOS-интерфейсом, тем не менее прекрасно работающий под Windows. Поддерживает двухоконный режим работы и управляется через ряд клавиатурных команд. В рамках FTP-доступа поддерживается доступ к разным прокси, множественный поиск и замена файлов. Главное преимущество программы — она бесплатная.

Как соединиться по FTP через Far Manager
  1. Запустите программу и определите панель (правую или левую), с которой будет сделан вход по FTP. Наберите клавиатурное сочетание Alt+F2 и выберите FTP-строку.
  2. Далее нажмите Shift+F4, после которого выйдет окно для ввода параметров соединения.
  3. Заполните соответствующие поля: в Description надо поименовать соединение и поставить крестик в параметр Passive Mode.
  4. После ввода всех параметров нажмите кнопку Save.
  5. На избранной в п. 1 панели после этого появится строка с выбранным именем FTP-соединения. На этой же строке нужно нажать Enter.
  6. В итоге произойдет соединение с удаленным сервером: можно начать передавать файлы в режиме двух панелей.

Присоединяйтесь к нашему Telegram-каналу!

  • Теперь Вы можете читать последние новости из мира интернет-маркетинга в мессенджере Telegram на своём мобильном телефоне.
  • Для этого вам необходимо подписаться на наш канал.

Total Commander

Год создания: 1993

Актуальная версия: 10.0

Внешний вид Total Commander

Что собой представляет

Файловый менеджер, имеющий в функционале FTP-клиент для операций с папками и файлами:

  • Копирование.
  • Вырезание.
  • Создание.
  • Переименование.
  • Просмотр.
  • Редактирование.
  • Удаление.

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

Как соединиться по FTP через Total Commander
  1. Запустите Total Commander. В меню выберите пункт «Сеть» и в выпадающем меню команду «Соединиться с FTP-сервером».
  2. В появившемся окне нажмите кнопку «Добавить» для инициации соединения.
  3. Здесь укажите параметры подключения:
    • Имя соединения. Впишите произвольное название, но такое, чтобы по нему было понятно, к чему вы присоединяетесь.
    • Сервер [:Порт]: адрес удаленного сервера или порт для доступа к нему.
    • Учетная запись. Введите пользовательский логин.
    • Пароль. Введите пользовательский пароль.

Не забудьте установить флажок «Пассивный режим обмена (Как Web-браузер)». После проведения всех настроек нажмите OK.

Читайте также:
Как создать карту сайта (sitemap.xml)

FileZilla

Год создания: 2001

Актуальная версия: 3.56.0

Внешний вид FileZilla

Что собой представляет

Самый известный FTP-клиент, максимально заточенный на работу с соответствующими соединениями. Является мультиплатформенным, потому что имеет версии в Linux, Mac OS и Windows.

ПО поддерживает FTP через протокол SSL, IPv6 и IDN. Умеет присоединиться к кириллическим доменам, передавать файлы с размером более 4 гигабайт и кастомизировать скорость передачи и скачивания файлов.

Поддерживается технология Drag-and-drop, удаленные просмотр и редактирование файлов, работа в нескольких вкладках и контроль очереди загрузки.

Как соединиться по FTP через FileZilla
  1. Запустите программу и в меню выберите пункт «Файл», а далее — «Менеджер сайтов».
  2. В появившемся окне щелкните по кнопке «Новый сайт».
  3. Укажите следующие параметры подключения:
    • Хост. Вводим адрес сервера.
    • Тип сервера. Указываем FTP (File Transfer Protocol).
    • Тип входа. Устанавливаем режим «Нормальный».
    • Пользователь. Вводим имя пользователя.
    • Пароль. Вводим корректный пароль пользователя.
    • Шифрование (Encryption). Ставим значение Use plain FTP.
  4. Теперь перейдите к вкладке «Настройки передачи», где надо выбрать пассивный режим передачи файлов и установить флажок «Ограничение одновременных подключений», а значение поля «Максимальное количество подключений» установить на 2. Нажмите кнопку «Соединиться».
  5. Если все было сделано правильно, далее произойдет соединение с сервером и можно будет работать в стандартном двухпанельном режиме передачи данных.

Спустя столько лет FTP по-прежнему остается более чем востребованным у владельцев веб-мастеров, которым, например, нужно добавить на сайт XML-карту, файл robots.txt и провести весь тот набор операций, о которых мы написали в статье.

Технический аудит сайта

  • Наличие дублей страниц, безопасность, корректность всех технических параметров: переадресаций, robots.txt, sitemap.xml скорость загрузки и др.
  • Техническая оптимизация — один из основных этапов в продвижении.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *