- •Введение
- •Постановка задачи
- •Формулировка задания
- •1.2 Определение данных и их представление
- •1.3 Определение видов выходных данных
- •Вычислительная система
- •Выбор программных средств и обоснование выбора
- •2.3 Системная среда
- •Проектирование
- •Проектирования интерфейса
- •Описание алгоритма
- •Определение подзадач и пути их реализации
- •4 Описание программы
- •4.1 Логическая структура
- •4.2 Физическая структура
- •5 Тестирование и отладка
- •6 Описание применения
- •7 Охрана труда
- •8 Экономический раздел
- •Заключение
- •Список использованных источников
- •Приложение 1
Заключение
Целью данного проекта является разработка системы отчетов пользователя в рамках модуля контроля трафика корпоративной сети. Все решения к этому проекту успешно реализованы в среде Delphi 7. Проект полностью контролирует входной и выходной трафик всех интерфейсов ПК. Дальнейшая возможность модификации – расширение функциональности для дальнейшего использования в других аспектах сети.
Программный продукт такого рода имеет широкую область применения в сфере контроля трафика, дающий возможность быстро и четко обрабатывать большое количество информации, избегая человеческих ошибок, а также экономить большое количество времени.
Качество программного средства соответствует всем заявленным требованиям.
Список использованных источников
Бобровский, С.Г. Технологии Delphi 7 - Питер, 2006. - 288с.
Шкрыль, А.В. Разработка КСП - Петербург, 2006 - 480с.
Осипов, Д.М. Delphi 7 Проф. Программ. - Минск , 2006 - 1056с.
Ржеуцкая, С. Ю. Базы данных. Язык SQL. - Минск, 2008. - 567 c.
Культин, Н.В. 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.