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

Заключение

Целью данного проекта является разработка системы отчетов пользователя в рамках модуля контроля трафика корпоративной сети. Все решения к этому проекту успешно реализованы в среде Delphi 7. Проект полностью контролирует входной и выходной трафик всех интерфейсов ПК. Дальнейшая возможность модификации – расширение функциональности для дальнейшего использования в других аспектах сети.

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

Качество программного средства соответствует всем заявленным требованиям.

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

  1. Бобровский, С.Г. Технологии Delphi 7 - Питер, 2006. - 288с.

  2. Шкрыль, А.В. Разработка КСП - Петербург, 2006 - 480с.

  3. Осипов, Д.М. Delphi 7 Проф. Программ. - Минск , 2006 - 1056с.

  4. Ржеуцкая, С. Ю. Базы данных. Язык SQL. - Минск, 2008. - 567 c.

  5. Культин, Н.В. Delphi Задачи в примерах - Питер, 2003. - 288 с.

Приложение 1

(обязательное)

Листинг программы

unit Unit1;

interface

uses

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

Dialogs, ComCtrls, StdCtrls, ToolWin, ExtCtrls, XPMan;

type

PMibIfRow = ^TMibIfRow;

TMibIfRow = packed record

wszName : array[0..255] of WideChar; // имя сетевого интерфейса

dwIndex : DWORD; // порядковый номер соот.. интерфейса

dwType : DWORD; // тип сетевого интерфейса 1 из 9

dwMtu : DWORD; // максимальная скорость передачи.

dwSpeed : DWORD; //скорость передачи данных (биты/сек)

dwPhysAddrLen : DWORD; // длина физического адреса устройства

bPhysAddr : array[1..8] of Byte; // физический адрес интерфейса

dwAdminStatus : DWORD; // активность интерфейса

dwOperStatus : DWORD; // текущий статус интерфейса

dwLastChange : DWORD; // последний измененный статус

dwInOctets : DWORD; // количество байт

dwInUcastPkts : DWORD; // количество направленных пакетов

dwInNUCastPkts : DWORD; // количество ненаправленных пакетов

dwInDiscards : DWORD; //количество входящих забракованных пакетов

dwInErrors : DWORD; // количество принятых пакетов, содержащих ошибки

dwInUnknownProtos : DWORD;//количество принятых забракованных пакетов с неизвестным протоколом

dwOutOctets : DWORD; // количество байт

dwOutUCastPkts : DWORD; // противоположно dwInUcastPkts

dwOutNUCastPkts : DWORD; //противоположно dwInNUCastPkts

dwOutDiscards : DWORD; // противоположно dwInDiscards

dwOutErrors : DWORD; // противоположно dwInErrors

dwOutQLen : DWORD; // длина очереди данных

dwDescrLen : DWORD; // размер bDescr

bDescr : array[0..255] of Char; // описание интерфейса end;

pMibIfArray = ^TMIBIFARRAY; TMibIfArray = array [0..512] of TMibIfRow;

PMibIfTable = ^TMibIfTable; TMibIfTable = packed record dwNumEntries : DWORD; //количество сетевых интерфейсов

Table : TMibIfArray; // массив структуры MIB_IF_ROW end;

TMacAddress=array [1..8] of byte;

type

TForm1 = class(TForm)

ListView1: TListView;

Bevel1: TBevel;

Timer1: TTimer;

XPManifest1: TXPManifest;

Button1: TButton;

Timer2: TTimer;

procedure Timer1Timer(Sender: TObject);

procedure Timer2Timer(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

function GetStrMac(Mac:TMacAddress; size:integer):string;

function GetInterfaceType (types:integer):string;

function Traff(count:integer):string;

function SpeedToStr(value:dword):string;

{ Private declarations }

public

{ Public declarations }

end;

var Form1: TForm1;

function GetIfTable(pIfTable:PMibIfTable; pdwSize: PULONG; bOrder: boolean ): DWORD; stdCall; external 'IPHLPAPI.DLL';

//функцией GetIfTable из библиотеки IPHLPAPI.DLL (в модулях, идущих вместе с

// Delphi, ее описания нет). Эта функция позволяет с легкостью получить

//информацию о трафике и сетевых интерфейсах.

// где:

//pIfTable - указатель на структуру MIB_IFTABLE

//wdSize - буфер для получения данных таблицы MIB_IFTABLE

//Order – сортировка

implementationuses Unit3;

{$R *.dfm}function TForm1.GetInterfaceType(types: integer): string;

begin Result:='Неизвестно';

case types of

1: Result:='Other'; 6: Result:='Ethernet'; 9: Result:='Token ring'; 23: Result:='PPP'; 24: Result:='Loopback'; 37: Result:='ATM';

71: Result:='IEEE 802.11'; 131: Result:= 'Tunnel'; 144: Result:='IEEE 1394 (Firewire)'; end;end;

function TForm1.GetStrMac(Mac: TMacAddress; size: integer): string;

var i:integer;begin if size = 0 then begin result:='00-00-00-00-00-00'; Exit; end; Result:=''; for i:=1 to size do

Result:=Result+IntToHex(Mac[i], 2)+'-'; Delete(Result, length(Result), 1);end;

function TForm1.SpeedToStr(value: dword): string;

const KB=1000; MB=KB*1000; GB=MB*1000;begin if Value<KB then Result:=FormatFloat('#,##0.00 bps',Value)

else if Value<MB then Result:=FormatFloat('#,##0.00 Kbps', Value/KB) else if Value<GB then

Result:=FormatFloat('#,##0.00 Mbps', Value/MB)end;

procedure TForm1.Timer1Timer(Sender: TObject);var

_MibIfTable:PMibIfTable; _P:Pointer; i:integer; _buflen:dword; _error:dword;begin

listview1.Items.Clear; _buflen:=sizeof(_MibIfTable^); New(_MibIfTable); _P:=_MibIfTable;

_error:=GetIfTable(_MibIfTable, @_buflen, false); if _error <> NO_ERROR then

begin ShowMessage('Произошла ошибка!'); Exit; end;

for i:=0 to TMibIfTable(_P^).dwNumEntries-1 do

with ListView1.Items.Add do begin caption:=Trim(TMibIfTable(_p^).table[i].bDescr); subitems.Add(GetInterfaceType(TMibIfTable(_P^).table[i].dwtype)); subitems.Add(GetStrMac(TMacAddress(TMibIfTable(_p^).Table[i].bPhysAddr), TMibIfTable(_p^).table[i].dwPhysAddrLen));

subitems.add(SpeedToStr(TMibIfTable(_p^).table[i].dwSpeed)); subitems.Add(Traff(TMibIfTable(_p^).table[i].dwOutOctets));

subitems.Add(Traff(TMibIfTable(_p^).table[i].dwInOctets)); subitems.Add(IntToStr(TMibIfTable(_p^).table[i].dwOutErrors));

subitems.Add(IntToStr(TMibIfTable(_p^).table[i].dwInErrors)); end;

dispose(_MibIfTable);end;function TForm1.Traff(count: integer): string;

const KB=1024; MB=KB*1024; GB=MB*1024;begin if Count<KB then Result:=FormatFloat('#,##0.00 B', count) else

if count<MB then Result:=FormatFloat('#,##0.00 KB', count/KB) else if count<GB then Result:=FormatFloat('#,##0.00 MB', count/MB);

end;procedure TForm1.Timer2Timer(Sender: TObject);beginForm1.Visible:=false;Timer2.Enabled:=false;end;

procedure TForm1.Button1Click(Sender: TObject);beginForm1.Visible:=False;Form3.Visible:=True;end;end.

50