Автоматизация управления процессами в локальных сетях

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    10,67 Кб
  • Опубликовано:
    2016-06-23
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Автоматизация управления процессами в локальных сетях

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

Учреждение образования

«Гомельский государственный университет

имени Франциска Скорины»

Математический факультет

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







Автоматизация управления процессами в локальных сетях

Курсовой проект



Исполнитель

студент группы ПО-32 Игнатенко А.О.

Научный руководитель

Кандидат физико-математических наук Родионов А.А.



Гомель 2015

Реферат

Ключевые слова: Сеть, ICMP пакет, функция ShellExecute, Командная строка, язык С++

Объект исследования: Автоматизация управления процессами в локальных сетях.

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

Методы исследования: Изучение теоритических сведений и рассмотрение алгоритмов решения поставленных задач в С++ Builder.

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

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

Вывод: С++ Builder является универсальной средой для создания программ под WINDOWS. За счет своей универсальности среда С++ Builder может быть использована для написания самых разных программ под WINDOWS.

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

Введение

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

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

В результате проектирования и программной реализации в среде программирования C++ Builder была создана соответствующая программа.

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

Бесплатных аналогов данной программы в сети Интернет найдено не было.

Требования программы к локальной сети

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

Функция ShellExecute может не только выполнять заданное приложение, но и открывать документ и печатать его. Под термином «открыть файл документа» понимается выполнение связанного с ним приложения и загрузка в него этого документа. Например, обычно с документами, имеющими расширение .doc, связанWord. В этом случае открыть файл, например, с именем file.doc означает запустить Word и передать ему в качестве параметра имя файла file.doc. Кроме описанных возможностей функция ShellExecute позволяет открыть указанную папку. Это означает, что будет запущена программа «Проводник» с открытой указанной папкой.

Для использования функции ShellExecute в модуль надо добавить директиву препроцессора подключающую модуль ShellAPI, в котором описана функция:

#include "ShellAPI.h"

Функция ShellExecute инкапсулирует одноименную функцию API Windows. Параметр Wnd является дескриптором родительского окна, в котором отображаются сообщения запускаемого приложения. Обычно в качестве него можно просто указать Handle.

Параметр Operation указывает на строку с нулевым символом в конце, которая определяет выполняемую операцию. Эта строка может содержать текст «ореn» (открыть) или «print» (напечатать). Для 32-разрядных Windows определено еще одно значение: «explore» (исследовать) - открыть папку программой Windows «Проводник». Если параметр Operation равен NULL, то по умолчанию выполняется операция «ореn».

Параметр FileName указывает на строку с нулевым символом в конце, которая определяет имя открываемого файла или имя открываемой папки.
Параметр Parameters указывает на строку с нулевым символом в конце, которая определяет передаваемые в приложение параметры, если FileName определяет выполняемый файл. Если FileName указывает на строку, определяющую открываемый документ или папку, то этот параметр задается равнымNULL.
Параметр Directory указывает на строку с нулевым символом в конце, которая определяет каталог по умолчанию.
Параметр ShowCmd определяет режим открытия указанного файла. Этот параметр может иметь множество различных значений. Обычно, как и для функции WinExec, используется значение SW_RESTORE, при котором окно запускаемого приложения активизируется и отображается на экране. Если это окно в данный момент свернуто или развернуто, то оно восстанавливается до своих первоначальных размеров и отображается в первоначальной позиции. Для приложений не Windows, для файлов PIF и т.д. состояние окна определяет само приложение.
Командная строка (CMD) - это отдельная программа, которая дает возможность пользователю напрямую взаимодействовать с операционной системой. Командная строка основана на среде, в которой выполняются приложения и служебные программы с помощью текстового интерфейса, а результат выполнения отображается на экране.

Командная строкаWindows использует интерпретатор команд cmd.exe, который позволяет загружать приложения и направляет поток данных между ними, проще говоря переводит команды пользователя, в понятный системе вид. Консоль командной строки интегрирована во все версии ОС Windows. На первый взгляд коммандный интерфейс пугает пользователя избалованных графическим интерфейсом того-же Windows, но как правило командный интерфейс, намного быстрее и имеет массу дополнительных возможностей, которые не могут быть осуществлены в граффическом интерфейсе.

Taskkill: завершает одно или несколько заданий или процессов. Процессы могут быть уничтожены кодом процесса или именем образа.[/sкомпьютер] [/uдомен\пользователь [/pпароль]]] [/fiимя_фильтра] [/pidкод_процесса]|[/imимя_образа] [/f][/t]

/sкомпьютер- Указывает имя или IP-адрес удаленного компьютера (не используйте обратную косую черту). По умолчанию используется локальный компьютер.

/uдомен\пользователь- Выполнение команды с разрешениями учетной записи пользователя, который указан как пользователь или домен\пользователь. По умолчанию используются разрешения текущего вошедшего пользователя компьютера, с которого поступила эта команда.

/pпароль- Определяет пароль учетной записи пользователя, заданной параметром /u.

/fiимя_фильтра- Задает типы процессов, которые следует завершить и не следует. Допустимыми именами фильтров, операторами и значениями являются следующие.

/pidкод_процесса- Указывает код процесса, который необходимо завершить.

/imимя_образа- Указывает имя образа процесса, который необходимо завершить. Используйте подстановочный знак (*) для указания всех имен образа.

/f- Указывает, что процесс(ы) должен быть принудительно завершен. Этот параметр не действует для удаленных процессов, все удаленные процессы завершаются принудительно.

/t - Задает завершение всех дочерних процессов вместе с родительским, такое действие обычно известно как уничтожение дерева.

/?- Отображает справку в командной строке.

Tasklist: отображает список приложений и служб с кодом процесса (PID) для всех задач, выполняющихся на локальном или удаленном компьютере.[.exe] [/sкомпьютер] [/uдомен\пользователь [/pпароль]] [/fo {TABLE|LIST|CSV}] [/nh] [/fiфильтр [/fiфильтр2 [ ... ]]] [/m [модуль] | /svc | /v]

/sкомпьютер - Указывает имя или IP-адрес удаленного компьютера (не используйте обратную косую черту). По умолчанию используется локальный компьютер.

/uдомен\пользователь - Выполняет команду с разрешениями учетной записи пользователя, который указан как пользователь или домен\пользователь. По умолчанию используются разрешения текущего вошедшего пользователя компьютера, с которого поступила эта команда.

/pпароль - Определяет пароль учетной записи пользователя, заданной параметром /u.

/fo {TABLE|LIST|CSV} - Задает формат выходных данных. Допустимые значения: TABLE, LIST и CSV. По умолчанию для выходных данных используется формат TABLE.

/nh - Запрещает вывод заголовков столбцов. Данный параметр является допустимым, если параметр /fo имеет значение TABLE или CSV.

/fiимя_фильтра - Задает типы процессов, которые следует завершить или не следует. Допустимыми именами фильтров, операторами и значениями являются следующие.

/m [модуль] - Задает вывод сведений о модулях для каждого процесса. При указании модуля отображаются все процессы, использующие этот модуль. Если модуль не определен, выводятся на экран все процессы для всех модулей. Нельзя использовать совместно с параметрами /svc и /v

/svc- Отображает без обрезки сведения о всех службах для каждого процесса. Данный параметр является допустимым, если параметр /fo имеет значение TABLE. Нельзя использовать совместно с параметрами /m и /v

/v- Задает отображение подробных сведений о задании в выходных данных. Нельзя использовать совместно с параметрами /svc и /m.

/?- Отображает справку в командной строке. (англ. InternetControlMessageProtocol - протокол межсетевых управляющих сообщений) - сетевой протокол, входящий в стек протоколов TCP/IP. В основном ICMP используется для передачи сообщений об ошибках и других исключительных ситуациях, возникших при передаче данных, например, запрашиваемая услуга недоступна, или хост, или маршрутизатор не отвечают. Также на ICMP возлагаются некоторые сервисные функции.

Протокол ICMP описан в RFC 792 (с дополнениями в RFC 950) и является стандартом Интернета (входит в стандарт STD 5 вместе с IP). Хотя формально ICMP использует IP (ICMP-пакеты инкапсулируются в IP пакеты), он является неотъемлемой частью IP и обязателен при реализации стека TCP/IP. Текущая версия ICMP для IPv4 называется ICMPv4. В IPv6 существует аналогичный протокол ICMPv6.

ICMP-сообщение строится из IP <#"justify">При потере ICMP-пакета никогда не генерируется новый.пакеты никогда не генерируются в ответ на IP-пакеты с широковещательным или групповым адресом, чтобы не вызывать перегрузку в сети (так называемый «широковещательный шторм»).

При повреждении фрагментированного IP-пакета ICMP-сообщение отправляется только после получения первого повреждённого фрагмента, поскольку отправитель всё равно повторит передачу всего IP-пакета целиком.

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

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

Для вывода списков имён компьютеров, процессов выбранного компьютера, и списков на автоудаление\автозапуск используются компоненты ListBox. Расчёт интервалов идёт при помощи компоненты Timer. При нажатии кнопки «Обновить» происходить обновление списка включённых компьютеров, при помощи компоненты ICMP. Сначала локальное имя компьютера преобразуется в IPадресс, а после на этот адрес высылается icmpпакет.

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

Получение списка процессов для выбранного компьютера происходит при помощи команды Tasklist.Результат её работы сохраняется в текстовый файл с последующим чтением из него программой. При заполнении списка процессов игнорируется процесс cmd.exe.

Заключение

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

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

Список использованных источников

.Архангельский А.Я. - Программирование в C++ Builder, 7 издание

.Архангельский А. Я. - C++Builder 6. Справочное пособие. Книга 1. Язык С++

4. Никита Культин - C++ Builder в задачах и примерах

Приложение А



Приложение В

компьютер локальный сеть

#include <vcl.h>

#pragma hdrstop

#include <IniFiles.hpp>

#include <string.h>

#include <stdio.h>

#include <winsock.h>

#include <stdlib.h>

#include "Unit1.h"

#include "Unit2.h"

//--------------------------------------------------------------

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma resource "*.dfm"*MainForm;kol;spisok[100][3];**ept;

//----------------------------------------------------void chit(int i,int j)

{

char a[40];

*a=0;

strcpy(a,spisok[j][0].c_str());

if(i==1)

strcat(a,"(вкл)");

else

if(i==0)

strcat(a,"(выкл)");

else

strcat(a,"(выключается)");

MainForm->st->Items->Add(a);

}

//----------------------------------------------------refresh1()

{

for(int i=1;i<=kol;i++)

{

MainForm->icmp->Host=spisok[i][1];

MainForm->icmp->Ping();

if(MainForm->icmp->ReplyStatus.ReplyStatusType==rsEcho)

MainForm->prop[i][1]=1;

else MainForm->prop[i][1]=0;

}

} //----------------------------------------------------refresh2()

{

kol=0;

FILE*f;

f=fopen("complist.txt","rb");

char *s=new char[80],*a=new char[80],*fall=new char[80];

int i=0,t=0;

*fall=0;

while(1)

{

if(feof(f)) break;

fgets(s,79,f);

i++;

a=strtok(s,"|");

spisok[i][0]=a;

a=strtok(NULL,"|");

spisok[i][1]=a;

a=strtok(NULL,"|");

spisok[i][2]=a;

a=strtok(NULL,"|");

*s=0;

int e=strlen(a);

if(a[e-1]=='\n') strncat(s,a,e-2);

else strcpy(s,a);

if(strstr(fall,s)==NULL)

{

MainForm->glb->Items->Add(s);

strcat(fall,s);

strcat(fall," ");

}

else

{

*a=0;

char *s1=new char[80];

*s1=0;

strcpy(s1,fall);

a=strtok(s1," ");

int j=1;

while(strstr(a,s)==NULL)

{

a=strtok(NULL," ");

j++;

}

MainForm->prop[i][0]=j;

}

}

kol=i+1;

ept=new Tim *[kol];

for( int i = 0; i < kol; ++i )

{

ept[i] = new Tim;

ept[i]->nom=i;

}

fclose(f);

}

//----------------------------------------------------vkl(int nom)

{

char a[40];

*a=0;

int i=1;

if(MainForm->prop[i][1]==1) return;

while (MainForm->prop[i][2]!=nom) i++;

strcpy(a,spisok[i][0].c_str());

strcat(a,"(вкл)");

MainForm->st->Items->Strings[nom]=a;

MainForm->st->Checked[nom]=false;

AnsiString s=spisok[i][2]+" 255.255.255.255 67";

ShellExecute(0,"open","broadc.exe",s.c_str(),0,SW_HIDE);

}vikl(int nom)

{

char a[40];

*a=0;

int i=1;

while (MainForm->prop[i][2]!=nom) i++;

if(MainForm->prop[i][1]==0||MainForm->prop[i][1]==2) return;

MainForm->st->Items->Strings[nom]=a;

AnsiString s="/c shutdown -с \""+MainForm->me->Text+"\" -t "+StrToInt(MainForm->cpe->Text)+" -s -m \\\\"+spisok[i][1];

MainForm->prop[i][4]=StrToInt(MainForm->cpe->Text);

int n=StrToInt(MainForm->cpe->Text) ;

ept[i]->Time=n;

ept[i]->comp=spisok[i][0];

ept[i]->Resume();

MainForm->prop[i][1]=2;

ShellExecute(0,"open","cmd.exe",s.c_str(),0,SW_HIDE);

}

//---------------------------------------------------------------------------

__fastcall TMainForm::TMainForm(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

//---------------------------------------------------------------------------__fastcall TMainForm::FormCreate(TObject *Sender)

{

TIniFile *Ini = new TIniFile(GetCurrentDir()+"\\config.ini");

MainForm->Left=Ini->ReadInteger("Options","left",NULL);

MainForm->Top=Ini->ReadInteger("Options","top",NULL);

MainForm->cpe->Text=Ini->ReadString("Options","timer",0);

refresh2();

refresh1();

glb->Selected[0]=true;

glbClick(Sender);

}

//------------------------------------------------__fastcall TMainForm::Button1Click(TObject *Sender)

{

int n=1;

char a[50];

refresh1();

glbClick(Sender);

}

//---------------------------------------------------------------------------

__fastcall TMainForm::Button2Click(TObject *Sender)

{

if(st->Items->Count!=0)

for(int i=0;i<st->Items->Count;i++)

st->Checked[i]=true;

}

//---------------------------------------------------------------------------

__fastcall TMainForm::Button3Click(TObject *Sender)

{

if(st->Items->Count!=0)

for(int i=0;i<st->Items->Count;i++)

st->Checked[i]=false;

}

//---------------------------------------------------------------------------__fastcall TMainForm::Button4Click(TObject *Sender)

{

if(st->Items->Count!=0)

for(int i=0;i<st->Items->Count;i++)

if(st->Checked[i]==true)

vkl(i);

}

//---------------------------------------------------------------------------

__fastcall TMainForm::Button5Click(TObject *Sender)

{

if(st->Items->Count!=0)

for(int i=0;i<st->Items->Count;i++)

if(st->Checked[i]==true)

vikl(i);

}

//---------------------------------------------------------------------------

__fastcall TMainForm::glbClick(TObject *Sender)

{

st->Clear();

char a[50];

int t=-1;

if (glb->Selected[0]==false)

for(int i=1;i<glb->Items->Count;i++)

{

if(glb->Selected[i]==true)

for(int j=1;j<kol;j++)

if(prop[j][0]==i)

{

prop[j][2]=++t;

ept[j]->Index=t;

chit(prop[j][1],j);

}

else prop[j][2]=-1;

}

else

for(int i=1;i<kol;i++)

{

prop[i][2]= ++t;

chit(prop[i][1],i);

ept[i]->Index=t;

}

}

//---------------------------------------------------------------------------

__fastcall TMainForm::FormDestroy(TObject *Sender)

for( int i = 0; i < kol; ++i )

{

ept[i]->Suspend();

ept[i]->Terminate();

}

delete[]ept;

TIniFile *Ini = new TIniFile(GetCurrentDir()+"\\config.ini");

Ini->WriteInteger("Options","left",MainForm->Left);

Ini->WriteInteger("Options","top",MainForm->Top);

Ini->WriteString("Options","timer",MainForm->cpe->Text);

delete Ini;

}

//--------------------------------------------------------------

__fastcall TMainForm::Button6Click(TObject *Sender)

{

for( int i = 0; i < kol; ++i )

{

ept[i]->Suspend();

ept[i]->Terminate();

}

delete[]ept;

glb->Clear();

glb->Items->Add("Все");

refresh2();

refresh1();

glb->Selected[0]=true;

glbClick(Sender);

}

//---------------------------------------------------------------------------

//--------------------------------------------------------------__fastcall TMainForm::N1Click(TObject *Sender)

{

for(int i=0; i<st->Items->Count;i++)

{

int j=1;

while (prop[j][2]!=i) j++;

if(prop[j][1]==2 && st->Checked[i]==true)

{

prop[j][1]=1;

AnsiString s="/c shutdown -a -m \\\\"+spisok[j][1];

ShellExecute(0,"open","cmd.exe",s.c_str(),0,SW_HIDE);

MainForm->st->Items->Strings[i]=spisok[j][1]+"(вкл)";

ept[j]->Suspend();

st->Checked[i]==false;

}

}

}

//-------------------------------------------------------------

Похожие работы на - Автоматизация управления процессами в локальных сетях

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!