Смекни!
smekni.com

Протокол HTTP (стр. 5 из 6)

2.3.2 Сервер и система управления динамическими библиотеками

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

Действия, выполняемые сервером, можно описать следующим образом:

1. Создание и настройка серверного сокета.

2. Прием входящего подключения.

3. Создание потока, который будет обрабатывать запрос.

Пункты 2 и 3 повторяются в течение всего времени работы сервера.

Поток, обрабатывающий запрос, выполняет следующие действия:

1. Принимает запрос от клиента.

2. Проверяет корректность запроса.

3. В случае корректного запроса обращается к системе безопасности для подтверждения доступа.

4. В случае разрешения доступа обращается к системе управления динамическими библиотеками, передав ей имя запрошенного модуля.

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

Работа сервера продолжается до тех пор, пока не равна нулю переменная, адрес которой был передан серверному модулю при старте. Эта переменная обнуляется при получении процессом сигнала SIGINT (соответствующего комбинации Ctrl+C на клавиатуре). Использование сигналов описано в п. 3.2.4.

2.3.3 Система журналирования

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

· Старт сервера – с указанием адреса и порта привязки.

· Входящее подключение – с указанием адреса клиента.

· Авторизация клиента.

· Запрос модуля.

· Сообщения о разнообразных ошибках в работе сервера.

Система журналирования самостоятельно генерирует имя файла на основании текущей даты: журнальные файлы имеют имена вида dd-mm-yyyy.log.

Для защиты своих статических данных система использует мьютекс (см. п. 3.2.2), что приводит к монополизации доступа потоков к системе. Это может несколько замедлить работу, однако разработанное приложение не является критичным ко времени, поэтому возникающие задержки вполне допустимы.

Система безопасности служит для проверки возможности доступа клиента к каким-либо модулям сервера.

Система безопасности может функционировать в двух режимах:

· Режим проверки доступа – сервер передает системе имя пользователя и пароль, которые она пытается найти в файле учетных записей. В случае нахождения совпадения доступ предоставляется, в противном – не предоставляется.

· Режим предоставления доступа – в этом случае доступ предоставляется для всех клиентов независимо от указанных имени и пароля. Используется только для тестирования сервера.

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

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

2.4 Динамические библиотеки

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

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

2.4.1 PROCESSES – информация о процессах

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

· Идентификатор (PID) процесса – получается путем чтения списка каталогов файловой системы /proc и выбора тех из них, название которых состоит только из цифр. В этом случае имя каталога и будет являться идентификатором процесса.

· Имя исполняемого файла – считывается из файла stat каталога процесса в /proc.

· Состояние процесса – считывается из файла status каталога процесса.

· Имя владельца процесса – получается с помощью функции stat(), примененной к каталогу процесса. Имя владельца процесса совпадает с именем владельца каталога процесса.

· Имя группы владельца процесса – аналогично имени владельца процесса, получается с помощью функции stat().

· Размер резидентной части процесса – считывается из файла statm из каталога процесса.

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

2.4.2 MEMINFO – информация о системной памяти

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

· Общее количество доступной физической памяти.

· Размер свободной части памяти.

· Размер памяти, разделяемой между процессами.

· Количество буферов ввода-вывода.

· Информация об области подкачки.

Предоставляемая информация извлекается из файла /proc/meminfo.

2.4.3 DISKFREE – информация о свободном месте на дисках

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

Информация получается с помощью команды оболочки fd (файл /bin/fd). Для того, чтобы перенаправить данные, выдаваемые при выполнении команды, используется дублирование процесса с помощью функции fork() и загрузка в адресное пространство порожденного процесса данных программы fd с помощью функции execv(). Вывод информации в дескриптор сокета вместо вывода на консоль осуществляется отображением потока данных, выводимых в стандартный поток вывода, на дескриптор сокета с помощью функции dup2().

2.4.4 NETWORK – информация о сетевых устройствах

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

· Количество принятых и отправленных байтов и пакетов.

· Количество возникших за время приема и передачи ошибок.

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

· Количество коллизий при передаче.

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

2.4.5 VERSION – версия операционной системы

Данная динамическая библиотека отображает в окне браузера версию операционной системы, под управлением которой работает сервер. Информация о версии системы получается из файла /etc/issue.

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

2.4.6 INDEX – страница помощи

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

Эту страницу пользователь получит, явно указав имя модуля «index», или в случае отсутствия указания имени модуля. Однако, в случае работы системы безопасности в режиме проверки доступа и указания пустого имени модуля будет выдана страница ошибки авторизации, а не страница помощи.

2.5 Использование программы

2.5.1 Настройка сервера

Конфигурирование систем программы может быть осуществлено одним из трех способов:

· Установка значений по умолчанию – параметры всех систем устанавливаются по умолчанию; значения параметров по умолчанию устанавливаются на этапе компиляции программы.

· Загрузка конфигурации из файла – все параметры загружаются из файла, состоящего из строк вида «имя_параметра=значение». Для хранения параметров используется файл linspy.conf, находящийся в одном каталоге с исполняемым файлом программы.

· Установка значений из командной строки – в этом случае параметры системы устанавливаются в соответствии с переданными аргументами командной строки.

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

Таблица 3.1

Опция командной строки Пояснение
-h, --help программа выводит описание опций командной строки и завершается;
-m dir, --moddir dir устанавливает каталог загрузки динамических библиотек равным dir; может быть использовано для быстрой смены набор библиотек;
-v, --verbose включает расширенный режим ведения журнального файла
-s mode, --security mode включает или выключает режим проверки доступа в зависимости от значения mode; если mode=“on”, проверка доступа включается, а если mode=“off” – выключается;
-a ip, --addr ip устанавливает адрес привязки серверного сокета равным ip;
-p num, --port num устанавливает порт привязки серверного сокета равным num;
-d, --daemon программа загружается в фоновом режиме (режиме демона).

2.5.2 Доступ к серверу

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