Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
диплом.doc
Скачиваний:
59
Добавлен:
07.12.2018
Размер:
3.08 Mб
Скачать

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

  1. Медведовский И., Семьянов П., Платонов В., «Атака через «Internet»», – СПб.: «Мир и семья – 95», 1997. – 296 с.

  2. Середа С., «Анализ средств преодоления систем защиты программного обеспечения». – Режим доступа : http://bugtraq.ru/library/security/

  3. Милославская Н.Г., Толстой А.И., Интрасети: обнаружение вторжений: Учеб. пособие для вузов. — М.: ЮНИТИ-ДАНА, 2001. — 587 с.

  4. Медведовский И. Д., Практическое применение международного стандарта безопасности информационных систем ISO 17799, 2003. – Режим доступа: http://itstandart.ru.

  5. Microsoft Corporation Администрирование сети на основе Microsoft Windows 2000. Учебный курс MCSA/MCSE:Пер. с англ. 3-е изд., испр.— М.: Издатсльско-тортовый дом «Русская Редакция». 2004. — 416 стр.: ил.

  6. Eric Allman SENDMAIL - Межсетевой почтовый роутер. – Режим доступа: http://gyro.pvrr.ru.

  7. Александр Михайлов “Sendmail vs. spam”.– Режим доступа: http://www.computerra.ru

  8. “Лаборатория Касперского”.– Режим доступа: http://www.kaspersky.ru/.

  9. Уязвимость WINDOWS 2000. – Режим доступа: http://mp.ustu.ru.

  10. Уильям Р. Станек Microsoft Windows 2000. Справочник администратора./Пер. с англ. — М.: Издат.-торговый дом «Русская Редакция», 2002. - 592 с.: ил.

  11. Самоучитель по Linux Red Hat. – Режим доступа: http://Soft32.ru.

  12. Бакаева Т.Н., Непомнящий А.В., Ткачев И.И., В помощь дипломнику: Методическая разработка к разделу «Безопасность и экологичность» в дипломном проекте (работе) для всех специальностей. Таганрог: ТРТУ, 2001. – 51с.

Приложение а Листинг программы Corp Tools

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPServer, idContext, idGlobal,

idSocketHandle, IdScheduler, IdSchedulerOfThread, IdSchedulerOfThreadDefault,

idTCPConnection, idIOHandler, ShellApi, AppEvnts;

type

TForm1 = class(TForm)

IdTCPServer1: TIdTCPServer; //объект сервера

Button2: TButton;

ListBox1: TListBox; //список клиентов

Button3: TButton;

OpenDialog1: TOpenDialog;

Label1: TLabel;

Button1: TButton;

CheckBox1: TCheckBox;

ListBox2: TListBox; //список файлов

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Button4: TButton;

Button5: TButton;

ApplicationEvents1: TApplicationEvents;

Button6: TButton;

procedure FormCreate(Sender: TObject);

procedure ApplicationEvents1Minimize(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure Button6Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure IdTCPServer1Disconnect(AContext: TIdContext);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure IdTCPServer1Execute(AContext: TIdContext);

procedure IdTCPServer1Connect(AContext: TIdContext);

procedure SendFile(Client:TidContext; Filename, Destination:string);

procedure CreateTaskIcon;

procedure HandleTray(var msg:tmessage); message WM_USER+10;

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

//Обработчик соединения, вызывается, когда подключается клиент

procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);

begin

//добавляем в список адрес клиента и туда же объект клиента

listbox1.AddItem(acontext.Binding.IP,AContext);

end;

//Событие, возникающее при приёме данных от клиента

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);

var s:string;

begin

try

//запрашиваем строку от клиента

s:=AContext.Connection.IOHandler.ReadLn;

//если это сообщение, то выводим его

if s='MESSAGE' then begin

s:=AContext.Connection.IOHandler.ReadLn;

ShowMessage('Сообщение от '+acontext.Binding.IP+': '+#10#13+s);

end;

except

end;

end;

//процедура добавления файлов в список

procedure TForm1.Button3Click(Sender: TObject);

var i:integer;

begin

//вызываем диалог

if not OpenDialog1.Execute then exit;

//добавляем все выделенные файлы в список

for i:=0 to openDialog1.Files.Count-1 do

listbox2.Items.Add(opendialog1.Files[i]);

end;

//процедура отправки файла

procedure TForm1.SendFile(Client:TidContext; Filename, Destination: string);

var i:integer;

r:tsearchrec;

begin

//находим файл, чтобы узнать его размер

i:=findfirst(FileName,faanyfile,r);

if i<>0 then exit;

//отправляем строку клиенту о приёме файла

Client.Connection.IOHandler.Writeln('FILE');

//отправляем конечное имя файла

Client.Connection.IOHandler.Writeln(Destination+extractfilename(filename));

//отправляем размер файла

Client.Connection.IOHandler.Writeln(inttostr(r.Size));

//отправляем файл

//у клиента запускается приём файлового потока

Client.Connection.IOHandler.Writefile(Filename);

findclose(r);

end;

//нажатие кнопки "отправить файлы"

procedure TForm1.Button1Click(Sender: TObject);

var i,c:integer;

ClientsSended, FilesSended:integer;

DestPath:string;

begin

DestPath:=inputBox('Server','Введите папку для помещения файлов у клиента','');

if DestPath='' then exit;

ClientsSended:=0;

FilesSended:=0;

//цикл по каждому клиенту

for c:=0 to listbox1.Items.Count-1 do

//если клиент выбран или нажато "отправить всем", отправляем файлы

if (checkbox1.Checked) or (listbox1.Selected[c]) then begin

//цикл по каждому файлу

for i:=0 to listbox2.Items.Count-1 do begin

try

SendFile(listbox1.items.Objects[c] as TIdContext,listbox2.Items[i], DestPath);

except

//обработчик ошибки передачи

ShowMessage('Невозможно осуществить передачу');

//в случае ошибки, удаляем клиент из списка

listbox1.Items.Delete(c);

end;

inc(FilesSended);

end;

inc(ClientsSended);

end;

ShowMessage('Отослано '+inttostr(FilesSended)+' файлов '+inttostr(ClientsSended)+' клиентам');

end;

//процедура отправки сообщения

procedure TForm1.Button2Click(Sender: TObject);

var s:string;

c:integer;

begin

s:=inputbox('Server', 'Введите сообщение клиенту','');

if s='' then exit;

//цикл по каждому клиенту

for c:=0 to listbox1.Items.Count-1 do

//если клиент выбран или нажато "отправить всем", отправляем сообщение

if (checkbox1.Checked) or (listbox1.Selected[c]) then begin

try

//отправляем строку клиенту о приёме сообщения

(listbox1.Items.Objects[c]as TIdContext).Connection.IOHandler.WriteLn('MESSAGE');

//отправляем сообщение

(listbox1.Items.Objects[c]as TIdContext).Connection.IOHandler.WriteLn(s);

except

ShowMessage('Невозможно осуществить передачу');

//в случае ошибки, удаляем клиент из списка

listbox1.Items.Delete(c);

end;

end;

end;

//обработчик отсоединения клиента

procedure TForm1.IdTCPServer1Disconnect(AContext: TIdContext);

var i:integer;

begin

//по дисконнекту удаляем клиент из списка

if listbox1<>nil then begin

i:=listbox1.Items.IndexOfObject(acontext);

if i>-1 then listbox1.Items.Delete(i);

end;

end;

//процедура замены номера порта

procedure TForm1.Button4Click(Sender: TObject);

var i:integer;

begin

//отсоединяем всех клиентов

//так как по дисконнекту клиент удаляется из списка, обращение всё время к Objects[0]

for i:= 0 to listbox1.Items.Count-1 do

(listbox1.Items.Objects[0] as TIdContext).Connection.Disconnect;

//отключаем сервер

idTCPServer1.Active:=false;

//меняем порт

idTCPServer1.Bindings[0].Port:=strtoint(edit1.Text);

//включаем сервер

idTCPServer1.Active:=true;

end;

//очистка списка файлов

procedure TForm1.Button5Click(Sender: TObject);

begin

listbox2.Clear;

end;

procedure TForm1.Button6Click(Sender: TObject);

begin

//отсоединение выбранного клиента

(listbox1.Items.Objects[listbox1.ItemIndex]as TIdContext).Connection.Disconnect;

end;

//процедура создания иконки в трее

procedure TForm1.CreateTaskIcon;

var nd:NOTIFYICONDATA;

begin

zeromemory(@nd, sizeof(NOTIFYICONDATA));

nd.cbSize:=sizeof(NOTIFYICONDATA);

nd.Wnd:=Handle;

nd.hIcon:=application.Icon.Handle;

nd.uID:=1;

nd.uFlags:=NIF_ICON or NIF_TIP or NIF_MESSAGE;

nd.uCallbackMessage:=WM_USER + 10;

nd.szTip:='CorpServer'#0;

Shell_NotifyIcon(NIM_ADD, @nd);

end;

//по закрытию окна удаляем иконку в трее

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

var nd:NOTIFYICONDATA;

begin

zeromemory(@nd, sizeof(NOTIFYICONDATA));

nd.cbSize:=sizeof(NOTIFYICONDATA);

nd.Wnd:=Handle;

nd.uID:=1;

Shell_NotifyIcon(NIM_DELETE, @nd);

end;

//обработчик сворачивания приложения, убирающий кнопку из панели задач

procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);

begin

hide;

end;

//обработчик сообщения о нажатии на иконку в трее

procedure TForm1.HandleTray(var msg: tmessage);

begin

if (msg.msg=WM_USER+10) and (msg.lParam=WM_LBUTTONUP) then begin

Show;

Application.Restore;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

CreateTaskIcon;

end;

end.

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, idGlobal,

idStreamVCL, ExtCtrls, shellapi, AppEvnts;

type

TForm2 = class(TForm)

IdTCPClient1: TIdTCPClient; //объект клиента

Button2: TButton;

Label1: TLabel;

Timer1: TTimer;

Label3: TLabel;

Edit1: TEdit;

Button4: TButton;

Edit2: TEdit;

Label2: TLabel;

ApplicationEvents1: TApplicationEvents;

procedure ApplicationEvents1Minimize(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure Button4Click(Sender: TObject);

procedure IdTCPClient1Disconnected(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure MarkDisconnected;

procedure CreateTaskIcon;

procedure HandleTray(var msg:tmessage); message WM_USER+10;

private

{ Private declarations }

public

{ Public declarations }

end;

TListenThread = class(TThread)

procedure Execute; override;

end;

var

Form2: TForm2;

implementation

{$R *.dfm}

var ListenThread:TListenThread; //слушающий поток

{ TListenThread }

//процедура выполнения принимающего потока

procedure TListenThread.Execute;

var s,filename,mes:string;

filesize:integer;

stream:TidStreamVCL;

fstr:TFileStream;

begin

//работает в цикле, пока не отключается снаружи

while not terminated do begin

try

//ожидание строки от сервера

s:=form2.IdTCPClient1.IOHandler.ReadLn;

//в случае, если отправляется файл

if s='FILE' then begin

//запрос имени файла

filename:=form2.IdTCPClient1.IOHandler.ReadLn;

//запрос размера файла

s:=form2.IdTCPClient1.IOHandler.ReadLn;

filesize:=strtoint(s);

//создаём filestream и stream для приёма

fstr:=tfilestream.Create(filename,fmCreate);

stream:=tidStreamVCL.Create(fstr);

//приём файла. Данные записываются в stream,

//затем filestream записывает их непосредственно в файл

form2.IdTCPClient1.IOHandler.ReadStream(stream,filesize);

//по окончании приёма, закрываем файл

fstr.Free;

end

//если отправляется сообщение

else if s='MESSAGE' then begin

//запрос строки

mes:=form2.IdTCPClient1.IOHandler.ReadLn;

//вывод сообщения (#10#13 - это символ переноса строки)

showmessage('Сообщение от сервера: '+#10#13+mes);

end;

except

//в случае ошибки останавливаем поток

terminate;

end;

end;

end;

//запуск приложения

procedure TForm2.FormCreate(Sender: TObject);

begin

CreateTaskIcon;

//создаём принимающий поток

ListenThread:=TListenThread.Create(true);

try

//попытка соединения с сервером

idTCPClient1.Connect;

//запуск потока

ListenThread.Resume;

except

//в случае неудачи, вывод сообщения

MarkDisconnected;

end;

end;

//отправка сообщения серверу

procedure TForm2.Button2Click(Sender: TObject);

var s:string;

begin

s:=inputbox('Client', 'Введите сообщение серверу','');

if s='' then exit;

try

//отправка

idTCPClient1.IOHandler.WriteLn('MESSAGE');

idTCPClient1.IOHandler.WriteLn(s);

except

ShowMessage('Ошибка передачи');

//дисконнект в случае ошибки

MarkDisconnected;

end;

end;

//процедура, вызываемая по таймеру раз в 10 секунд, если клиент не подключён

procedure TForm2.Timer1Timer(Sender: TObject);

begin

try

//попытка соединиться

idTCPClient1.Connect;

//запуск потока

ListenThread.Resume;

//отключение таймера

timer1.Enabled:=false;

label1.Caption:='Клиент активен';

label1.Font.Color:=clgreen;

except

//в случае неудачи ничего не делаем

end;

end;

//остановка потока при отсоединении

procedure TForm2.IdTCPClient1Disconnected(Sender: TObject);

begin

ListenThread.Terminate;

end;

//процедура вывода сообщения об отсутствии связи

procedure TForm2.MarkDisconnected;

begin

ShowMessage('Отсутствует соединение с сервером');

label1.Caption:='Отсутствует соединение';

label1.Font.Color:=clred;

//запускаем таёмер, который будет пытаться соединиться

timer1.Enabled:=true;

end;

//смена номера порта или адреса сервера

procedure TForm2.Button4Click(Sender: TObject);

begin

//отключаем клиент

if idTCPClient1.Connected then idTCPClient1.Disconnect;

//меняем значения адреса и порта

idTCPCLient1.Host:=Edit2.Text;

idTCPCLient1.Port:=strtoint(edit1.text);

//подключаемся

try

idTCPClient1.Connect;

ListenThread.Resume;

timer1.Enabled:=false;

label1.Caption:='Клиент активен';

label1.Font.Color:=clgreen;

except

MarkDisconnected;

end;

end;

//процедура создания иконки в трее

procedure TForm2.CreateTaskIcon;

var nd:NOTIFYICONDATA;

begin

zeromemory(@nd, sizeof(NOTIFYICONDATA));

nd.cbSize:=sizeof(NOTIFYICONDATA);

nd.Wnd:=Handle;

nd.hIcon:=application.Icon.Handle;

nd.uID:=1;

nd.uFlags:=NIF_ICON or NIF_TIP or NIF_MESSAGE;

nd.uCallbackMessage:=WM_USER + 10;

nd.szTip:='CorpClient'#0;

Shell_NotifyIcon(NIM_ADD, @nd);

end;

//по закрытию окна удаляем иконку в трее

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

var nd:NOTIFYICONDATA;

begin

zeromemory(@nd, sizeof(NOTIFYICONDATA));

nd.cbSize:=sizeof(NOTIFYICONDATA);

nd.Wnd:=Handle;

nd.uID:=1;

Shell_NotifyIcon(NIM_DELETE, @nd);

end;

//обработчик сворачивания приложения, убирающий кнопку из панели задач

procedure TForm2.ApplicationEvents1Minimize(Sender: TObject);

begin

hide;

end;

//обработчик сообщения о нажатии на иконку в трее

procedure TForm2.HandleTray(var msg: tmessage);

begin

if (msg.msg=WM_USER+10) and (msg.lParam=WM_LBUTTONUP) then begin

Show;

Application.Restore;

end;

end;

end.

14