Курсовая работа

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

Категория:

Курсовая работа

Дисциплина:

Системное программирование

Город:

Беларусь, Минск

Учебное заведение:

БНТУ, ФИТР

Стоимость работы:

50 руб.

Оценка: 10
Объем страниц: 49
Год сдачи: 2021
Дата публикации: 07.05.2021

* Кроме файла с работой, также есть архив с дополнительными файлами.

Описание дополнительных файлов:

ClientAndServer - исходный код программы
Схемы - схемы для пояснительной записки

Фрагменты для ознакомления

Необходимо разработать приложение для управления удалёнными процессами компьютера в сети организации

 

СОДЕРЖАНИЕ

ВВЕДЕНИЕ.. 6

1 АНАЛИЗ СОСТОЯНИЯ ВОПРОСА.. 8

1.1 Процесс – экземпляр исполняемой программы. Управление процессами. 8

1.1.1 Создание процесса. 8

1.1.2 Открытие процесса. 10

1.1.3 Класс приоритета процесса. 11

1.1.4 Ожидающие функции. 12

1.1.1.5 Завершение процессов. 13

1.1.1.6 Закрытие дескриптора открытого объекта. 13

1.2 Функция открытия или вывода на печать указанного файла. 13

1.3 Моментальный снимок процессов. 15

1.4 Remote Desktop Services API. 16

1.5 Клиент-серверное взаимодействие. 18

2 ПОСТАНОВКА ЗАДАЧИ.. 20

3 ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.. 22

3.1 Логическая схема решения задачи « Управление удалёнными процессами». 22

3.2 Программный интерфейс. 23

3.3 Описание основных функций. 27

3.3.1 Функции Сервера. 28

3.3.2 Функции Клиента. 29

3.4 Физическая структура решения. 29

3.4.1 Структура Клиента. 29

3.4.2 Структура Сервера. 30

4 РЕАЛИЗАЦИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.. 32

4.1 Получения списка активных процессов. 32

4.2 Получение мгновенного снимка процессов. 35

4.3 Запуск процесса. 37

4.4 Установка класса приоритета процесса. 38

4.5 Уничтожение процесса. 40

4.6 Клиент – серверное взаимодействие. 42

5 ТЕСТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.. 47

5.1 Тестирование серверного приложения. 47

5.1.1 Запуск нескольких серверов. 47

5.2 Тестирование клиентского приложения. 48

5.2.1 Запуск нескольких клиентов. 48

5.2.2 Попытка послать запрос незапущенному серверу. 48

5.2.3 Ошибка прохождения процедуры аутентификации клиентом.. 49

ВЫВОДЫ... 50

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ... 51

ПРИЛОЖЕНИЕ А.. 52

ПРИЛОЖЕНИЕ B.. 55

 

ВВЕДЕНИЕ

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

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

1. Системные процессы – процессы, выполняемые в режиме ядра операционной системы. К ним относятся код операционной системы и драйверы устройств. Им разрешается доступ ко всей физической системной памяти и выполнение любых машинных команд процессора, в том числе привилегированных. 

2. Пользовательские процессы – процессы, которые работают только в своем адресном пространстве и не влияют на ход функционирования системных процессов, но могут быть ими принудительно завершены. Пользовательским процессам доступны библиотеки подпрограмм и функции API (Application Program Interface), при необходимости они переходят на уровень системных процессов.

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

На сегодняшний день существует огромное количество программ, позволяющих не просто удаленно выполнять какие-то приложения на удаленном компьютере, а полностью создающих эффект работы на удаленной машине путем передачи содержимого экрана. Наиболее популярные программы этой серии: Radmin (www.radmin.ru), Hidden Administrator (www.HidAdmin.ru), TeamViewer 11.0 (www.TeamViewer.com). При помощи таких программ можно контролировать работу удалённых процессов и принудительно выполнять с ними некоторые действия. 

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

В программе предусмотрены следующие моменты:

  • получения снимка процессов в удалённой системе
  • запуск удалённого процесса;
  • изменение класса приоритета удалённого процесса;
  • завершение удалённого процесса;

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

В разделе 1 – «Анализ состояния вопроса» - рассмотрены основные теоретические основы, функции, необходимые для выполнения проекта.

В разделе 2 – «Постановка задачи» - определены основные цели, задачи курсового проекта, обозначены базовые условия и ограничения.

В разделе 3 – «Проектирование программного обеспечения» - показаны физические структуры проектов, логические схемы решения задач, описан основной функционал и интерфейс.

В разделе 4 – «Реализация программного обеспечения» - изложена последовательность действий при разработке курсового проекта, разработке основного функционала.

В разделе 5 – «Тестирование программного обеспечения» - представлено тестирование программного обеспечения, показаны ситуации, при которых возникают ошибки.

 

1 АНАЛИЗ СОСТОЯНИЯ ВОПРОСА

Управления удалёнными процессами осуществляется по средствам клиент-серверного взаимодействия, как правило, используется соединения, в основе которых лежат сокеты.

1.1 Процесс – экземпляр исполняемой программы. Управление процессами

Любое приложение, запущенное на выполнение, представляет собой процесс. Каждому процессу при загрузке выделяются ресурсы операционной системы:

  • объект ядра, представляющий собой небольшой блок памяти, через который операционная система управляет выполнением процесса;
  • адресное пространство, содержащее код и данные[1].

 

1.1.1 Создание процесса

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

BOOL CreateProcess (

LPCTSTR lpApplicationName,                      //Имя исполняемого модуля

LPTSTR lpCommandLine,                              //Командная строка для выполнения

LPSECURITY_ATTRIBUTES lpProcessAttributes,      //Указатель на структуру //SECURITY _ATTRIBUTES для //процесса

LPSECURITY_ATTRIBUTES lpThreadAttributes,      // Указатель на структуру //SECURITY_ATTRIBUTES для //потока

BOOL bInheritHandles,                                                  //Указывает на наследуемость //возвращаемого описателя

DWORD dwCreationFlags,                             //Флаги управления классом приоритета и //создания процесса

LPVOID lpEnvironment,                                 //Указатель на блок переменных 

                                                                            //окружения

LPCTSTR lpCurrentDirectory,                       //Текущий диск и каталог

LPSTARTUPINFO lpStartupInfo,                  //Указатель на структуру STARTUPINFO

LPPROCESS_INFORMATION lpProcessInformation );          //Указатель на структуру

                                                                                            //PROCESS_INFORMATION 

Параметр lpstartupinfo — указатель на структуру STARTUPINFO, поля ко­торой определяют режим открытия нового процесса:

struct STARTUPINFO { 

DWORD cb;                                       //размер структуры

LPSTR lpReserved;                           //NULL

DWORD dwX;                                   //левый верхний угол

DWORD dwY;                                   //нового окна

DWORD dwXSize;                           //ширина

DWORD dwYSize;                           //и высота нового консольного окна 

DWORD dwXCountChars;              //размер буфера 

DWORD dwYCountChars;              //консоли 

DWORD dwFillAttribute;                //цвет текста (в консольном приложении) 

DWORD dwFlags;                              //флаг определяет разрешенные поля 

WORD wShowWindow;                  //способ отображения окна 

WORD cbReserved2;                       //NULL 

LPBYTE lpReserved2;                     //NULL 

HANDLE hStdlnput;                         //дескрипторы стандартных

HANDLE hStdOutput;                      //потоков ввода/вывода

HANDLE hStdError;                         //потока ошибок

};

Последний параметр lpProcessinformation — указатель на структуру PROCESS_INFORMATION, в которой возвращается значение дескриптора и идентификатора порождаемого процесса и потока:

struct PROCESS_INFORMATION {

HANDLE hProcess;                                         //дескриптор нового процесса

HANDLE hThread;                                          //дескриптор главного потока

DWORD dwProcessId;                                    //идентификатор нового процесса

DWORD dwThreadld;                                     //идентификатор главного потока

};

В случае успешного окончания CreateProcess() возвратит TRUE и процесс будет запущен, в ином случае функция возвратит FALSE и процесс не будет запущен.

 

1.1.2 Открытие процесса

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

HANDLE OpenProcess(

DWORD dwDesiredAccess,                            // флажок доступа
BOOL bInheritHandle,                                    // параметр дескриптора наследования
DWORD dwProcessId                                     // идентификатор процесса

);

Параметр dwDesiredAccess устанавливает уровень доступа к объекту процесса. Данный параметр может принимать следующие значения:

  • PROCESS_ALL_ACCESS — все возможные права доступа для объекта процесса;
  • PROCESS_CREATE_PROCESS — необходимо для создания процесса;
  • PROCESS_CREATE_THREAD — необходимо для создания потока;
  • PROCESS_QUERY_INFORMATION — необходимо, чтобы извлечь некоторую информацию о процессе, такую как его код выхода и класс приоритета (см. GetExitCodeProcess и GetPriorityClass);
  • PROCESS_SET_INFORMATION — необходимо, чтобы установить некоторую информацию о процессе, такую как его класс приоритета (см. SetPriorityClass);
  • PROCESS_TERMINATE — необходимо для завершения работы процесса с использованием функции TerminateProcess.

Функция OpenProcess() завершается успешно, то величина возвращаемого значения -открытый дескриптор заданного процесса. А если функция завершается с ошибкой, величина возвращаемого значения ПУСТО (NULL) [2].

 

1.1.3 Класс приоритета процесса

По умолчанию при создании процесса при помощи функции CreateProcess() задается класс приоритета Normal и большинство процессов создается именно таким образом. Классы приоритета влияют на распределение процессорного времени между потоками процессов. Слишком высокий класс приоритета для процесса —может сказаться на производительности системы в целом.

В таблице 1.1.3.1 приведены идентификаторы, которыми можно определить класс приоритета процесса при его создании в параметре dwCreationFlags функции CreateProcess(). Класс приоритета можно изменить или получить при помощи функций SetPriorityClass() и GetPriorityClass() соответственно.

Таблица 1.1.3.1 Классы приоритета процесса

Класс приоритета

Идентификатор

Значение

Real-time (реального времени)

REALTIME_PRIORITY_CLASS

0x00000100

High (высокий)

HIGH_PRIORITY_CLASS

0x00000080

Above normal (выше обычного)

ABOVE_NORMAL_PRIORITY_CLASS

0x00008000

Normal (обычный)

NORMAL_PRIORITY_CLASS

0x00000020

Below normal (ниже обычного)

BELOW_NORMAL_PRIORITY_CLASS

0x00004000

Idle (простаивающий)

IDLE_PRIORITY_CLASS

0x00000040

Функция GetPriorityClass():

DWORD WINAPI GetPriorityClass(HANDLE hProcess);

Возвращает информацию о классе приоритета процесса, а другая функция SetPriorityClass():

BOOL WINAPI SetPriorityClass(HANDLE hProcess, DWORD dwPriorityClass);

Позволяет изменить класс приоритета работающего приложения, который будет действовать лишь на вновь созданные потоки [1].

 

1.1.4 Ожидающие функции

Функции для работы с объектами ядра требуют переключения в режим ядра, что отнимает примерно 1000 тактов процессорного времени, поэтому являются «медлен­ными» операциями.

Набор Wait-функций позволяет приостанавливать выполнение потока до освобо­ждения объекта ядра. Чаще всего используется функция:

DWORD WINAPI WaitForSingleObject( 

HANDLEhHandle,                         //дескриптор объекта ядра 

DWORD dwMilliseconds);                       //время ожидания

Функция ожидает освобождении объекта ядра dwMiliseconds миллисекунд (значение параметра INFINITE используется для неограниченного ожидания) и, если по истечении этого времени объект не был освобожден, возвращает значение WAIT_TIMEOUT. При успешном завершении функция возвращает нулевое значе­ние WAIT_OBJECT_0.

Если объект ядра hHandle занят, функция WaitForSingleObject() переводит поток в режим ожидания (т. е. поток «засыпает» и не участвует более в распределении процессорного времени), если же объект свободен, он переводится в занятое состояние, и выполняются следующие инструкции программного кода.

 

1.1.5 Завершение процессов

Для принудительного и безоговорочного завершения процессов служит функция TerminateProcess: 

BOOL TerminateProcess(

HANDLE hProcess,                                    // описатель процесса

DWORD dwExitCode                                // код завершения процесса

);

Функция TerminateProcess() завершается успешно, то величина возвращаемого значения - не ноль. Если функция завершается с ошибкой, величина возвращаемого значения - ноль.

 

1.1.6 Закрытие дескриптора открытого объекта

Для аннулирования заданного дескриптор объекта, и уменьшения итогового число дескрипторов объекта необходимо использовать функцию CloseHandle(). Её прототип:

BOOL CloseHandle(

HANDLEhObject                                       // дескриптор объекта

);

Если функция завершается успешно, величина возвращаемого значения - не нуль.

 

1.2 Функция открытия или вывода на печать указанного файла

ShellExecute предназначена не только для запуска программ, но и для открытия и печати различных документов, то есть запуска приложений, сопоставленных определенным типам файлов. Например, в качестве имени файла указать mydoc.doc, то будет запущено приложение, сопоставленное файлам с расширением doc (Microsoft Word). Функция ShellExecute производит поиск файла в путях, указанных в переменной PATH[3]. Её прототип:

HINSTANCE ShellExecute(

HWND hwnd,                      // дескриптор родительского окна

LPCTSTR lpOperation,      // строка, описывающая операцию

LPCTSTR lpFile,                 // имя файла

LPCTSTR lpParameters,     // параметры командной строки

LPCTSTR lpDirectory,       // текущая директория для запускаемой программы

INT nShowCmd       // параметр, указывающий, как будет показано

// приложение при открытии

);

Эта функция возвращает значение >32 в случае успешного выполнения и значение <= 32 в случае ошибки.

Параметр lpOperation может принимать значения:

  • edit — запускает редактор и открывает документ для редактирования. Если lpFile не файл документа, функция будет выполнена;
  • explore — открывает папку, указанную lpFile;
  • find — инициирует поиск, начиная с директории, указанной в lpDirectory;
  • open — открывает элемент, указанный в lpFile параметра. Пункт может быть файл или папку;
  • print — печать файл, указанный в lpFile. Если lpFile не файл документа, функция терпит неудачу.
  • NULL — используется операция по умолчанию, если таковые имеются. Если нет, то используется «open» операция .

 

1.3 Моментальный снимок процессов

Для получения моментального снимка из указанных процессов, а также кучи, модули и потоки, используемые этими процессами, используют функцию CreateToolhelp32Snapshot. Её прототип:

HANDLEWINAPICreateToolhelp32Snapshot (

_In_ DWORD dwFlags,                  // информацию нам нужно "снять"

_In_ DWORD th32ProcessID         // идентификатор процесса, к которому относится эта // информация

);

Аргумент dwFlags определяет, снапшот чего именно мы хотим получить. Некоторые возможные значения: TH32CS_SNAPPROCESS, TH32CS_SNAPMODULE, TH32CS_SNAPTHREAD.

В случае успеха функция CreateToolhelp32Snapshot() возвращает хэндл снапшота, который должен быть закрыт с помощью CloseHandle. В случае ошибки возвращается значение INVALID_HANDLE_VALUE.

Функция Process32First принимает хэндл, полученный от CreateToolhelp32Snapshot, вызванной с dwFlags = TH32CS_SNAPPROCESS, а также указатель на структуру PROCESSENTRY32.

Структура PROCESSENTRY32 содержит 10 полей:

  1. Первое поле – dwSize – размер структуры в байтах. Это единственное поле, которое должно быть заполнено до вызова функцииProcess32First. Заполнить его можно, используя выражение sizeof(PROCESSENTRY32).
  2. Второе поле – cntUsage – содержит число ссылок на процесс, то есть число потоков, которые в настоящий момент используют какие-либо данные процесса.
  3. Третье поле – th32ProcessID – является идентификатором процесса.
  4. Четвертое поле – th32DefaultHeapID – не используется, и всегда устанавливается в ноль.
  5. Пятое поле – th32ModuleID – не используется, и всегда устанавливается в ноль.
  6. Шестое поле – cntThreads – определяет число потоков, принадлежащих процессу.
  7. Седьмое поле – th32ParentProcessID – является идентификатором родительского по отношению к текущему процесса.
  8. Восьмое поле – pcPriClassBase – содержит базовый приоритет процесса.
  9. Девятое поле – dwFlags – не используется, и всегда устанавливается в ноль.
  10. Десятое поле – szExeFile – содержит имя файла, создавшего процесс.

В случае успеха возвращается TRUE, а в peProcessEntry записывается информация о первом процессе.

Функция Process32Next работает полностью аналогично Process32First, но служит для получения второго и последующих процессов.

Семантика у функций Module32First и Module32Next полностью аналогична Process32First и Process32Next, отличие только в том, что в качестве второго параметра передаётся структура MODULEENTRY32 и  служат они для перечисления модулей в заданном процессе[4].

 

1.4 Remote Desktop Services API

Можно использовать WTSEnumerateProcesses функцию, чтобы получить информацию об активных процессах на указанный Remote Desktop Session Host сервера. Тем не менее, если указать WTS_CURRENT_SERVER_HANDLE в первом аргументе (handle сервера), моно перечислить и получить информацию о процессах, которые запущены на локальном компьютере[5].

Если ОС Windows Vista или более поздняя версия, можно в качестве альтернативы использовать WTSEnumerateProcessesEx, которые могут получить дополнительную информацию в WTS_PROCESS_INFO_EX структур. Её прототип:

BOOL WINAPI WTSEnumerateProcessesEx(

_In_ HANDLE hServer,                 // hadle Server

_Inout_ DWORD *pLevel, // тип возвращаемой информации

_In_ DWORD SessionID,               // сессии для которых перечислить процессы 

_Out_ LPTSTR *ppProcessInfo,   // указатель на массив WTS_PROCESS_INFO или

// WTS_PROCESS_INFO_EX структур

_Out_ DWORD *pCount               // указатель на переменную, которая получает 

// число структур, возвращенных в буфере,

);

Функция WTSEnumerateProcessesEx заполняет массив ppProcessInfo структурами CProcessInfoEx, которые следующую информацию:

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

 

 1.5 Клиент-серверное взаимодействие

Клиент-серверное взаимодействие организуется при помощи сокетов. Функции для работы с ними описаны в заголовочном файле winsock2.h, для их использования в проект необходимо включить файл ws2_32.lib [3]. 

Основные функции, в обязательном порядке необходимые для реализации серверной части [3]:

  1. WSAStartup() – инициирует использование библиотеки сокетов;
  2. socket() – создает экземпляр сокета;
  3. bind() – соединяет сокет с определенным портом по локальному адресу;
  4. listen() – переводит серверный сокет в состояние прослушивания;
  5. accept() – принимает клиентский сокет из очереди;
  6. closesocket() – закрывает сокет;
  7. WSACleanup() – прекращает использование библиотеки сокетов;

Приведенные функции должны быть использованы именно в такой последовательности, в какой они представлены в списке. Основные функции, которые должны использоваться при реализации клиентской части, это функции №1, 2, 6, 7 из предыдущего списка и функция connect(), которая соединяется с определенным серверным сокетом. 

Для непосредственного получения и отправки данных используются функции [3]:

  1. send() – отправляет данные на соединенный сокет;
  2. recv() – принимает данные от соединенного сокета;

Более подробная информация о данных функциях, их прототипах приведена, а приложении А.

 

 

2 ПОСТАНОВКА ЗАДАЧИ

Необходимо разработать приложение для управления удалёнными процессами компьютера в сети организации.

Чтобы защитить управление компьютера от злоумышленника и разрешить клиенту совершить привилегированную операцию на стороне сервера необходимо использовать пароль и имя клиента 

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

Задачи клиентского приложения:

  1. При входе в клиент-приложение предусмотреть поля для ввода: имени пользователя, пароля, IP-адреса, № порта;
  2. Отправка запроса аутентификации при попытке установки соединения с серверным приложением;
  3. Отправка запроса на получение от сервера моментального снимка всех удалённых процессов в системе и вывод их в виде списка;
  4. Отправка запроса на уничтожение удалённых процессов, имя которых совпадает с именем, которое будет передано от клиента и вывод информации о результате выполнения запроса;
  5. Отправка запроса на изменение класса приоритета удалённых процессов, имя которых совпадает с именем, которое будет передано от клиента и вывод информации о результате выполнения запроса;
  6. Отправка запроса на создание определённого процесса в удалённой системе и вывод информации о результате выполнения запроса;
  7. Отправка запроса на открытие определённого файла в удалённой системе и вывод информации о результате выполнения запроса;
  8. Отправка запроса на получение информации об активных процессах и вывод информации о результате выполнения запроса;
  9. Отправка запроса на получение клиентом списка всех открытых модулей для каждого удалённого процесса и вывод их в виде списка;
  10. Отправка запроса на получение клиентом списка всех потоков для каждого удалённого процесса и вывод их в виде списка;
  11. Информацию о всех запросах и действиях в клиентском приложении отображать в виде списке.

Задачи серверного приложения:

  1. Перед получение каждого запроса от клиента проводить аутентификацию;
  2. Получение запроса от клиента на получение моментального снимка всех процессов в системе и передача необходимых ему данных;
  3. Получение запроса от клиента на уничтожение процессов в системе, имя которых совпадает с именем, которое получено от клиента и отправка результата выполнения операции;
  4. Получение запроса от клиента на изменение класса приоритета процессов, имя которых совпадает с именем, которое получено от клиента и отправка результата выполнения операции;
  5. Получение запроса от клиента на создание определённого процесса в системе и отправка результата выполнения операции;
  6. Получение запроса от клиента на открытие определённого файла в удалённой системе и вывод информации о результате выполнения операции;
  7. Получение запроса от клиента на получение информации об активных процессах и вывод информации о результате выполнения операции;
  8. Получение запроса от клиента на получение клиентом списка всех открытых модулей каждого процесса и передача необходимых ему данных;
  9. Получение запроса от клиента на получение клиентом списка всех потоков каждого процесса и передача необходимых ему данных;
  10. Информацию о всех запросах и действиях в серверном приложении отображать в виде списке.
  11. Предусмотреть наличие строки состояния состоящею из двух частей: в первой части отображалось имя локального хоста, а во второй его IP-адрес.

 

3 ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Решение состоит из двух приложений:

  1. Server.exe
  2. Client.exe

Клиенты могут получать информацию о процессах сервера и управлять ими.

3.1 Логическая схема решения задачи « Управление удалёнными процессами»

Для решения задачи необходимо применить клиент-серверное взаимодействие, основанное на потоковых сокетах. Клиент будет посылать структуру AUTHENTICATION серверу по определённому IP-адресу и порту. Прежде чем обработать запрос, сервер проверит имя клиента и пароль, и если клиент будет аутентифицирован, то сервер проверит запрос, и, если такой существует выполнит его. Логическая схема решения данной задачи представлена на рисунке 3.1.1. 

Рис 3.1.1 - Логическая схема решения данной задачи
Рис 3.1.1 - Логическая схема решения данной задачи

 

5 ТЕСТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

 

5.1 Тестирование серверного приложения

5.1.1 Запуск нескольких серверов

При попытке запустить 2 и более приложений Server.exe все приложения, кроме первого запущенного, будут оповещать пользователя об ошибке (рисунок 5.1.1.1).

Рисунок 5.1.1.1 – Оповещение об ошибочном повторном запуске серверного приложения

Рисунок 5.1.1.1 – Оповещение об ошибочном повторном запуске серверного приложения

 

5.2 Тестирование клиентского приложения

5.2.1 Запуск нескольких клиентов

Приложение успешно работает при работе с одним сервером одного и более клиентов (рисунок 5.3.1.1).

Рисунок 5.3.1.1 – Информация об аутентификации 2-ух клиентов

Рисунок 5.3.1.1 – Информация об аутентификации 2-ух клиентов

 

5.2.2 Попытка послать запрос незапущенному серверу

При попытке установить соединение с незапущенным сервером, будет выведено соответствующее сообщение в информационное поле (рисунок 5.3.2.1).

 

Рисунок 5.3.2.1 – Оповещение о невозможности соединения с сервером

Рисунок 5.3.2.1 – Оповещение о невозможности соединения с сервером

5.2.3 Ошибка прохождения процедуры аутентификации клиентом

При вводе неправильного пароля или имени пользователя и попытке установки соединения, пользователь будет оповещён об ошибке аутентификации (рисунок 5.2.3.1).

Рисунок 5.3.2.1 – Оповещение об ошибки прохождения аутентификации

Рисунок 5.3.2.1 – Оповещение об ошибки прохождения аутентификации

 

Приложение для управления удалёнными процессами компьютера в сети организации

 

Приложение для управления удалёнными процессами компьютера в сети организации. Запуск сервера

 

Приложение для управления удалёнными процессами компьютера в сети организации. Запуск клиента
81