Одним из первых прикладных протоколов является протокол передачи файлов (FTP-File Transfer Protocol). Разработан он в 1971 году и применяется в виде доступа к файлам удаленных хостов. На основе протокола FTP, разрабатывается программное обеспечение (ПО) для доступа к FTP-серверу. FTP-сервер – это удаленный хост, который предоставляет доступ к своим ресурсам и к хранящемся на нем файлам. Такое ПО носит название FTP – менеджер. В зависимости от поставленных целей, FTP-менеджеры могут предоставлять файлы и ресурсы так, как будто они имеются на компьютере пользователя, либо просто выполняют свою роль в виде отправки команд пользователя и файлов.
Протокол FTP и его модель описана в книге Н. Дилипа «Стандарты и протоколы интернета» [1]. В лабораторном практикуме С.Л. Сурменко описаны команды FTP протокола, его функционирование и демонстрация FTP-менеджера [2]. Пример разработки FTP-менеджера в программной среде Delphi продемонстрировано в книге С.М. Парижского [3]. А.В.Иванов провел исследование безопасности протокола FTP [4]. Автоматическое управление на основе ftp-соединений в домене показал И.Коробко [5]. А.Луконькин рассмотрел работу с ftp-сервером из «1С:Предприятие» [6]. Р.И.Баженов, А.П.Корников применяли сетевые технологии в своих исследованиях [7, 8].
Рассмотрим разработку собственного FTP-менеджера, используя язык программирования PHP.
Для начала создадим класс, который будет содержать в себе различные функции для взаимодействия с FTP-сервером. Нашей задачей является, разработка FTP-менеджера, используя стандартные FTP команды для передачи их FTP-серверу, однако некоторые готовые PHP функции мы все же будем использовать.
В созданном классе напишем функцию Connect() для соединения с FTP-сервером (Рисунок 1).
Рисунок 1 – PHP-функция соединения с FTP-сервером
Функция Connect() содержит в себе 3 параметра: server, user и pass. В первый параметр передаем хост (или IP) FTP-сервера, во втором параметре передаем имя пользователя FTP-сервера, а в третьем – пароль данного пользователя.
При успешном соединении с хостом данного FTP-сервера, функция проверяет имя пользователя и пароля, отправляя FTP-серверу команду USER и PASS. Если аутентификация прошла успешно, то функция возвращает полученный идентификатор соединения данного FTP-сервера для последующего обращения различных команд к данному потоку FTP-сервера (Рисунок 2).
Рисунок 2 – PHP-функции отправки FTP команд
Во всех случаях в функции обычно передаются 2 параметра. Первым параметром является идентификатор FTP-сервера, который мы получили после выполнения функции Connect(), а вторым параметров является дополнительные команды/запросы для выполнения тех или иных операции.
Например, в функции USER(), в первом параметре передается идентификатор FTP-сервера, а во втором параметре передается имя пользователя. Внутри каждой функции используется еще одна функция – ftp_raw(), эта функция отправляет различные произвольные команды FTP-серверу. Зная команды FTP-протокола, мы можем, в нашем примере, произвести аутентификацию имя пользователя с помощью команды вида «USER имя_пользователя».
Помимо выполнения и отправки различных FTP команд, мы также еще одновременно записываем всю информацию в лог с помощью функции Message() (Рисунок 3). Позже можно будет вызвать функцию Log() для дальнейшего отображения лога в окне веб-интерфейса и проследить все происходящие события (Рисунок 4). В случае успеха или неудачи, мы всегда можем посмотреть возвращаемые коды ответа и выяснить статус данных действии.
Функция Message() :
Рисунок 3 – PHP-функция записи лога
В первом параметре передается само сообщение, для которого нужно будет выводить в лог, а во втором параметре передается тип данного сообщения. В нашем случае существуют всего четыре типа: D (Default) – обычное оповещение в логе, C (Client) – оповещение со стороны клиента, S (Server) – оповещение со стороны сервера и E (Error) – оповещение с ошибкой или неудачах каких-либо операции. Эти сообщения обрабатываются, и задают HTML/CSS стиль данного текста в нужный цвет окраски, в зависимости от того какой это тип сообщения. D – по умолчанию (т.е. без цвета), C – синего цвета, S – зеленного цвета и E – красного цвета. Все сгенерированные и обработанные сообщения записываются в сессию $_SESSION["message"].
Функция Log():
Рисунок 4 – PHP-функция вывода лога
Приступим к описанию интерфейса программы. Для создания интерфейса были использованы инструменты средств HTML и CSS. Первым делом создали окно авторизации, где в полях нужно ввести сервер, логин и пароль для соединения с FTP-сервером (Рисунок 5).
Рисунок 5 – Окно авторизации
После успешной авторизации пользователь переходит в основное окно FTP-менеджера (Рисунок 6).
Рисунок 6 – Главное окно FTP-менеджера
Рассмотрим более подробно это окно. В верхней части расположены кнопки, которые имеют свои определенные функции для взаимодействия с файлами/папками на FTP-сервере, такие как: «Обновить», «Копировать», «Вырезать», «Переименовать», «Удалить», «Права», «Создать папку», «Залить файл», «Скачать файл», «Выйти».
Следом идет элемент в виде полосы, растянутый на всю ширину. В нем располагается отображаемый путь (местонахождение), в зависимости от того в каком каталоге вы находитесь. С помощью него можно свободно перемещаться и на несколько уровней выше, нажав на нужный каталог в данном пути.
В центре интерфейса отображена таблица со списком имеющихся файлов/папок какого-либо каталога, в зависимости от местоположения. Данная таблица содержит в себе несколько столбцов:
-
Имя – это наименование данного файла/папки.
-
Размер – указывается размер данного файла в КилоБайтах.
-
Дата – дата создания данного файла.
-
Время – время создания данного файла.
-
Права – буквенный вид прав доступа к данному файлу/папке.
Нижняя часть интерфейса состоит из мини-статистики и лога. Статистика отображает следующее: Количество папок и файлов в данном каталоге; Название FTP-сервера, к которому мы подключены; Имя текущего пользователя, присоединенному к данному FTP-серверу; Максимальный размер загружаемого файла. В логах отображены все наши какие-либо произошедшие операции и действия.
Рассмотрим метод подключения функций к интерфейсу. Воспользуемся языком JavaScript, который содержит в себе AJAX технологию, для динамичной загрузки и обновления данных в интерфейсе FTP-менеджера.
Рассмотрим функцию LIST(), которая будет отображать список содержимого того или иного каталога в таблице FTP-менеджера. Для начала, мы напишем функцию на языке JavaScript с использованием jQuery возможностей (Рисунок 7).
Рисунок 7 – JavaScript-функция отображения списка содержимого
В функции ftp_list() передается один параметр, который содержит в себе путь в строковом виде. Данный путь отправляется с помощью AJAX технологии скрипту list.php (Рисунок 8), который, в свою очередь, будет использовать написанный выше PHP класс и выполнять свои действия для успешного отображения содержимого того или иного каталога, в зависимости от того какой путь был им передан.
Скрипт list.php:
Рисунок 8 – Фрагмент кода list.php скрипта
Данный скрипт подключается к нашему классу с помощью функции Connect() и при успешном соединении получает идентификатор соединения FTP-сервера, куда, в свою очередь, передает данный идентификатор следующей функции – LIST(), и заодно передает наш полученный путь, сгенерированный JavaScript функцией через AJAX технологию.
При успешном выполнении команды LIST, получаем список содержимого, который в дальнейшем генерируется в HTML для отображения данного списка в таблице FTP-менеджера.
Теперь необходимо подключить JavaScript функцию на сайте (Рисунок 9).
Рисунок 9 – Подключение JavaScript-функции для отображения списка содержимого
Во время загрузки, страница автоматически ищет функции внутри тега <script></script>, и запускает их. В нашем случае, при загрузке страницы срабатывается функция ftp_list(), которая передает параметр $_SESSION["current_path"] – эта переменная содержит в себе путь. Если пользователь в первый раз заходит в FTP-менеджер, то по умолчанию присваивается путь “/”, то есть корневой каталог FTP-сервера. При посещении различных папок, соответственно, меняется и путь в данной переменной. Также эта функция привязана и к кнопке «Обновить», где при нажатии на данную кнопку произойдет обновление списка содержимого. Помимо этого, данная функция выполняется и после других различных операции, такие как, к примеру: копирование, перемещение, переименование и т.д.
Таким образом, был разработан FTP-менеджер с web-интерфейсом, для доступа к которому необходим всего лишь выход в интернет.
Библиографический список
-
Дилип Н. Стандарты и протоколы интернета. М.: Изд. Отдел «Русская редакция» ТОО «Channel Trading Ltd.», 1999. 384 с.
-
Сурменко С.Л. Лабораторный практикум по информационным сетям: учебное пособие. Биробиджан: ДВГСГА, 2005. 62 с.
-
Парижский С.М. Delphi. Учимся на примерах // Онлайн библиотека uhlib.ru URL: http://www.uhlib.ru/kompyutery_i_internet/delphi_uchimsja_na_primerah/p19.php
-
Иванов А.В. Исследование безопасности протокола FTP // Научно-технический вестник информационных технологий, механики и оптики. 2005. № 19. С. 167-171.
-
Коробко И. Автоматическое управление. ftp-соединениями в домене // Системный администратор. 2012. № 7-8 (116-117). С. 28-29.
-
Луконькин А. Работаем с ftp-сервером из «1С» // Системный администратор. 2009. № 5 (78). С. 70-71.
-
Белов И.В., Винокуров А.С., Баженов Р.И. Разработка программы удаленного управления компьютером на основе протокола telnet // Science Time. 2014. № 10 (10). С. 39-43.
-
Баженов Р.И., Корнилков А.П., Лопатин Д.К. Проектирование web-ориентированной информационной системы университета на основе клиент-серверных технологий // Актуальные проблемы гуманитарных и естественных наук. 2014. № 4-1. С. 68-71.