Курсовая: Разработка средств программного мониторинга - текст курсовой. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Курсовая

Разработка средств программного мониторинга

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Курсовая работа
Язык курсовой: Русский
Дата добавления:   
 
Скачать
Архив Zip, 267 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникальной курсовой работы

Узнайте стоимость написания уникальной работы

15 23 Содержание Введение 4 1 Анализ поставленной задачи 6 2 Разработка алгоритма работы программы 7 3 Кодирование программ ы 9 4 Проверка и отладка программы 1 0 5 Оценка результатов работы программы 1 2 Заключение 1 3 Литерат у ра 1 4 Приложение А. Блок-схема алгоритма работы программы 1 5 Приложение Б . Листинг и модулей программы 1 6 Введение При работе в сети Internet персональный компьютер подвергается постоянной опасности заражения компьютерными вирусами при получении как исполняемых (программных), так и документальных файлов. Современный хакерский инструментарий настолько автоматизирован, что даже люди, не очень сведущие в сетевых и коммуникационных технологиях, могут без труда воспользоваться ими. Повысить безопасность сети поможет использование специального ПО, предназначенного для защиты компьютеров и сетей от вирусов, программных закладок, «дыр» и т. д. Защита данных в компьютерных сетях становится одной из самых открытых проблем в современных информационно-вычислительных системах. На сегодняшний день сформулировано три базовых принципа информационной безопасности, задачей к о торой является обеспечение: - целостности данных - защита от сбоев, ведущих к потере информации или ее уничтожения; - конфиденциальности информации; - доступности информации для авторизованных пользоват е лей. С уществуют изощренные средства обнаружения незваных гостей, стремящихся незаконно проникнуть в ваши сетевые владения. Однако такие средства нельзя воспринимать как законченные решения в области информационной безопасности. Они скорее являются еще одним интеллектуальным инструментом, помогающим реализовать стратегию защиты корпоративной сети наряду с другими компонентами вроде антивирусных приложений. В частности, система обнаружения сетевых атак позволяет провести мониторинг сетевой активности и выявить наиболее уязвимые места в сети или на отдельных хост-компьютерах. Наличие одного подобного продукта заметно повышает степень защищенности сети. Средства для мониторинга сети и обнаружения в её работе «узких мест» можно разделить на два основных класса: - стратегические; - тактические. Назначение стратегических средств состоит в контроле за широким спектром параметров функционирования всей сети и решен ии проблем конфигурирования ЛВС, тактических – мониторинг и устранение неисправностей сетевых устройств и сетевого кабеля. К стратегическим средствам относятся: - системы управления сетью; - встроенные системы диагностики; - распределённые системы мониторинга; - средства диагностики операционных систем, функциониру ю щих на больших машинах и серверах. С уществует целый ряд программ осуществляющих мониторинг активности сети компьютера. Например, программы, называемые снифферами. Сниффер - это программное обеспечение , созданное для мониторинга сетевого потока и/или его анализа. Изначально такие программы задумывались в помощь системным администраторам для анализа проблем сети. Но сниф ф еры, как большинство программного обеспечения для сис темных админ истраторов , широко распространились и среди хакеров. Ведь такие вещи можно использовать и для перехвата паролей и другой незашифрованной информации, приходящей из сети, и исходящей в Сеть. В соответствии с заданием необходимо разработать программное обеспечение осуществляющее мониторинг сетевой активности компьютера под управлением операционной системы Windows . 1 Анализ поставленной задачи Разрабатываемая программа должна осуществлять мониторинг за сетевой активност ью компьютера . При этом необходимо использовать не менее трех способов пров ерки сетевой активности компьютера. Диапазон сканирования адресов должен задаваться пользователем. Предполагается разработать программу на подобие сниффера. Программа разрабатывается в качестве монитора сетевых протоколов, при этом не будут использоваться функции для перехвата паролей и другой незашифрованной информации. В программе будут реализованы следующие функции : 1. О пределения скорости соединения и 'живост и' удаленного компьютера ( команда ping ) . Эта задача осуществляется путём посылки Echo-сообщений протокола ICMP c последовательным перебором всех адресов сети или отправкой Echo-сообщения по широковещательному адресу. Анализируя трафик и отслеживая Echo-сообщения, посылаемые за короткий промежуток времени всем узлом, можно выявить попытки сканирования (будет указываться диапазон сканирования) . 2. Сканирование всех протоколов используемых в текущий момент времени с помощью Winsock . Сокеты — это транспортный механизм, который чаще всего используется в высокопроизводительных серверных приложениях. Библиотека Win32 Windows Sockets (Winsock) предоставляет механизмы, которые повышают быстродействие программ, использующих сокеты. 3. О пределения сетевой активности компьютера с помощью к оманд Windows « netstat ». Она и спользуется например, чтобы узнать, с каким сайтом соединяется какая-либо программа. 4. Проверка на наличие подключения по локальной сети , наличие сетевых интерфейсов с помощью подгружаемой библиотеки Windows « iphlpapi . dll » . 2 Разрабо тка алгоритма работы программы Блок- схема разрабатываемо й программы составляется на основании анализ а поставленной задачи и функций, которые должн ы выполняться программой . Общая блок-схема программы приведена в П риложении А. Выполнение тех или иных функций в программе зависит от действия пользователя, т.е. в режиме диалога: Вывод меню пользователя (НАЧАЛО): - сканирование методом ping ; - сканирование с етевых интерфейсов ; - сканирование с помощью netstat и Winsock ; - завершение работы программы. В зависимости от действия пользователя (блок 1), выбранн ого методов сканирования (блок и 2, 4, 6 ) вызываются соответствующие процедуры Ping , Winsock , iphlpapi , netstat (блок и 3, 5, 7,8 ) . Результаты процессов сканирования выводятся в таблицы (адреса, время прохождения пакетов , название сетевых интерфейсов и т.п.). Если в ыбрано заверш ение работы программы осуществляется выход (КОНЕЦ). Процедура проверки IP - адресов. Проверяется длина введенной строки (15 символов), затем она разбивается на группы. Символы – 1-3, 5-7, 9-11, 13-15 – каждая тройка проверяется на соответствие диапазону от 0 до 255. Затем для диапазона адресов проверяются первые три группы символов на равенство, последняя – на соответствие верхнего (большего) и нижнего (меньшего) значения. Если проверка введенных адресов прошла без ошибок, то выполняется процедура сканирования ping . Процедура сканирования ping . Для выполнения сканирования сетевых ресурсов используется диапазон IP -адресов. В цикле от верхней границы до нижней осуществляется посылка сообщения на указанные адреса, в течении 1500с если ответ не пришел от адреса, значит он считается недоступным. В противном случае выводится информация пингования (длина отправленного сообщения, время ответа от исследуемого адреса, время жизни сообщения). Процедура определения сетевых подключений . О пределяется наличие сетевых интерфейсов на локальном компьютере и информацию о них . Далее с читыва ются все IP адреса со всех присутствующих в системе сетевых интерфейсов . Далее осуществляется вывод полученных данных. Далее определяются текущие активные соединения, выводится информация об интерфейсе и количестве переданных и принятых данных. Сканирование приложений с помощью Netstat В Windows эта команда имеется, для ее использования осуществляется вызов командной строки и выполнение команды « netstat -abn », полученные данные сохраняются в текстовый файл « log . txt ». После чего выводится преобразованная информация о текущих приложениях использующих сетевые ресурсы. 3 Кодирование программы Разработанный алгоритм работы программы реализуется на языке программирования Delphi . Программа состоит из нескольких модулей: Основной м одуль ( unit 1 . pas ) – содержит список подключаемых модулей, список его процедур: F unction TForm 1. ping _ ip ( s : string ): Boolean ; - осуществление опроса указанного IP -адреса, результат возвращается «истина» если ответ получен <=1500 c . Function TForm1.ValidIp:boolean; - осуществление проверки правильности введения границ сканирования. P rocedure TForm 1. BitBtn 1 Click ( Sender : TObject ); - выполняется цикл сканирования введенных адресов от начального до конечного и вывод полученной информации в таблицу. P rocedure TForm 1. Bitbtn 2 Click ( Sender : TObject ); - в данной процедуре вызывается процедура сканирования протоколов, и выполняется преобразование и вывод полученной информации от выполнено в командной строке функции Netstat . P rocedure TForm 1. FormCreate ( Sender : TObject ); - выполняется вызов командной строки и выполнение Netstat . М одуль сканирования Connect ( Connect . pas ) – в нем описана структура получения имен сетевых интерфейсов, отображение активного подключения, информации о количестве переданных и принятых данных. Модуль сканирования NetIFEnum ( NetIFEnum . pas ) – содержит функции для получения сведений о типах имеющихся сетевых адаптеров , их адресов . Модуль Tracer ( Tracer . pas ) – содержит процедуры и функции для проверки активных сетевых подключени ях, вывод информации от какого адреса передаются данные и т.п . Листинг модулей программы приведен в приложении Д. 4 Проверка и отладка программы Разработка и отладка программы осуществлялась на компьютерах со следующими характеристиками: - Процессор Pentium III и выше ; - ОЗУ 256МБ и выше; - наличие сетевых ресурсов ( Network , Lan , Internet ); - ОС Windows XP . На этапе генерации кода при возникновении ошибок (например: неверный вывод информации о сетевых подключениях, зависание программы, неверные размер переменных и т.д.) использовались точки останова, трассировка, имеющиеся в Delphi , с помощью данных процедур поиск ошибок облегчается. Результаты работы программы представлены на рисунке 1 – рисунке 3 Рисунок 1. Сканирование протоколов и активных прог рамм Рисунок 2. – Определение сетевых интерфейсов Рисунок 3 – Сканирование диапазона адресов 5 Оценка результатов работы программы Результаты работы программы отображают выполнение всех перечисленных функций. Но имеются недоработки в программе, следует для использования сканирования диапазона адресов не встроенный компонент Delphi IdIcmpClient , а любую другую структуру формирования команды ping , т.к. встроенная имеет недостаток – при сканировании большого диапазона адресов программа зависает и только после сканирования к ней возвращается управление. Так же можно добавить вывод имени домена по IP -адресу. При определении сетевых интерфейсов можно добавлять свои способы отображения активности сети – в трее, указывать переданную и полученную информацию, рассчитать затраты трафиков и т.п. При выводе значении команды Netstat можно организовать свою функцию для преобразования текста в отдельные значения и заносить их в таблицу для более удобной наглядности. Определение сетевой активности компьютера не ограничено использованными функциями, имеется и множество других Telnet , NetShare и т.д. Заключение Использование компьютеров и автоматизированных технологий приводит к появлению ряда проблем для руководства организацией. Компьютеры, часто объединенные в сети, могут предоставлять доступ к колоссальному количеству самых разнообразных данных. Поэтому люди беспокоятся о безопасности информации и наличии рисков, связанных с автоматизацией и предоставлением, гораздо большего доступа к конфиденциальным, персональным или другим критическим данным. Все увеличивается число компьютерных преступлений, что может привести, в конечном счете, к подрыву экономики. И поэтому должно быть ясно, что информация - это ресурс, который надо защищать. Для защиты сетевых ресурсов необходимо учитывать все возможные варианты проникновения извне. В рамках данной работы создание мощного экрана сети было не возможно, т.к. это требует достаточно большой базы знаний о сети, сетевых приложениях. В процессе разработки программного обеспечения мониторинга сетевой активности компьютера, была проведена большая работа с литературой по сетевым приложениям. Список литературы 1. Партыка Т.Л., Попов И.И. Информационная безопасность. Учебное пособие. – М.: ФОРУМ – ИНФА-М, 2005; 2. Романец Ю.В. Тимофеев П.А., Шаньгин В.Ф. Защита информации в компьютерных системах и сетях. М.: Радио и связь, 2001; 3. Delphi . Программирование на языке высокого уровня. Учебник для вузов / В.В. Фаронов.- СПб.: Питер. 2003. - 640 с: ил. 4. Фленов М.Е. Программирование в Delphi глазами хакера. – СПб.: БХВ - Петербург, 2003; 5. http://www.hackzone.ru/ 6. http://book.itep.ru/4/44/ 7. http://ru.wikipedia.org/wiki/ 8. http://softsearch.ru/ 9. http://sources.ru/security/attack2/ 10. http://www.delphisources.ru/ 11. http://www.webmaster.azolli.com/ Приложение А (обязательное) Рисунок А.1 - Блок – схема общего алгоритма работы программы Приложение Б (обязательное) Листинг проекта Monitor . dpr program Monitor; uses Forms, Unit1 in 'Unit1.pas' Form1 , Unit2 in 'Unit2.pas' AboutBox , Tracer in 'Tracer.pas', Connect in 'Connect.pas', NetIFEnum in 'NetIFEnum.pas'; $R *.res begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(TAboutBox, AboutBox); Application.Run; end. Листинг модуля Unit1.pas unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, Buttons, Mask, ComCtrls,IdIcmpClient,winsock, IdBaseComponent, IdComponent, IdRawBase, IdRawClient, ExtCtrls; type TForm1 = class(TForm) PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; GroupBox2: TGroupBox; Label1: TLabel; Label2: TLabel; BitBtn1: TBitBtn; TV3: TListView; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; IdIcmpClient1: TIdIcmpClient; Adr1: TMaskEdit; Adr2: TMaskEdit; TVs: TListView; TabSheet3: TTabSheet; BitBtn2: TBitBtn; TV1: TListView; StatusBar1: TStatusBar; Timer1: TTimer; BitBtn3: TBitBtn; Label3: TLabel; Label4: TLabel; BitBtn4: TBitBtn; TVnt: TTreeView; Memo1: TMemo; Label5: TLabel; procedure N2Click(Sender: TObject); procedure N1Click(Sender: TObject); function ping_ip(s: string): Boolean; procedure BitBtn1Click(Sender: TObject); procedure FormShow(Sender: TObject); Function ValidIp : boolean ; Приложение Б ( продолжение ) procedure TV1Change(Sender: TObject; Item: TListItem;Change: TItemChange); procedure Bitbtn2Click(Sender: TObject); procedure TV3Change(Sender: TObject; Item: TListItem;Change: TItemChange); procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private Private declarations public Public declarations end; var Form1: TForm1; implementation uses Unit2,Tracer,Connect,NetIFEnum; $R *.dfm function TForm1.ping_ip(s: string): Boolean; begin IdIcmpClient1.Host:=s; IdIcmpClient1.Ping; if IdIcmpClient1.ReplyStatus.MsRoundTripTime>=1500 then begin Result:=False; with tv3.Items.Add do begin //5 Caption :=(IdIcmpClient1.Host); SubItems.Add('n/a'); end; //5 end else begin Result:=True; with tv3.Items.Add do begin//4 Caption :=IdIcmpClient1.Host; SubItems.Add(inttostr(IdIcmpClient1.ReplyStatus.BytesReceived)); SubItems.Add(inttostr(IdIcmpClient1.ReplyStatus.MsRoundTripTime)); SubItems.Add(inttostr(IdIcmpClient1.ReplyStatus.TimeToLive)); end;//4 end; end; procedure TForm1.N2Click(Sender: TObject); begin close; end; procedure TForm1.N1Click(Sender: TObject); begin AboutBox.show; end; Function TForm1.ValidIp:boolean; var n,s,e,k:string[3]; n1,s1,e1,k1:string[3]; begin ValidIp:=false; n:=copy(adr1.Text, 1, 3); n1:=copy(adr2.Text, 1, 3); s:=copy(adr1.Text, 5, 3); s1:=copy(adr2.Text, 5, 3); e:=copy(adr1.Text, 9, 3); e1:=copy(adr2.Text, 9, 3); k:=copy(adr1.Text, 13, 3); k1:=copy(adr2.Text, 13, 3); if (n=n1) and (s=s1) and (e=e1) and (knil then Result:=StrPas(Hostent^.h_name) else Result:='n/a'; end; procedure TForm1.BitBtn1Click(Sender: TObject); var ip_na4alo,ip_konec:integer; ip:string; begin //0 if validip then begin //2 ip:=copy(adr1.text,1,12); ip_na4alo:=strtoint(copy(adr1.text,13,3)); ip_konec:=strtoint(copy(adr2.text,13,3)); while ip_na4alo<>(ip_konec+1) do begin ip:=copy(adr1.text,1,12); ip:=ip+inttostr(ip_na4alo); ping_ip(ip);// then //адрес овтетил ip_na4alo:=ip_na4alo+1; end; end;//2 end;//0 procedure TForm1.FormShow(Sender: TObject); begin adr1.Text:='192.168.001.001'; adr2.Text:='192.168.001.004'; end; procedure TForm1.TV1Change(Sender: TObject; Item: TListItem; Change: TItemChange); begin TV1.Scroll(0,Item.Position.y); end; procedure TForm1.Bitbtn2Click(Sender: TObject); var ms : TMemoryStream; s:string; begin TCreate ; //если русская ОС, то переводим текст в русский вот так: ms := TMemoryStream.Create; ms.LoadFromFile('log.txt'); OEMToCharBuff(ms.Memory, ms.Memory, ms.Size); SetString(s, PAnsiChar(ms.Memory), ms.Size); ms.Free; memo1.Lines.Add(s); memo1.Lines.Insert(0,'a'); memo1.Lines.delete(0); end; Приложение Б ( продолжение ) procedure TForm1.TV3Change(Sender: TObject; Item: TListItem; Change: TItemChange); begin TV3.Scroll(0,Item.Position.y); end; procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled:=true; ReadLanInterfaces(TVnt); end; procedure TForm1.Timer1Timer(Sender: TObject); begin tmrTraff(TVs); Label3.Caption:=DateTimetostr(date+time); end; procedure TForm1.Button2Click(Sender: TObject); begin Timer1.Enabled:=false; end; procedure TForm1.FormCreate(Sender: TObject); begin if WinExec(PAnsiChar('cmd /u /c netstat -abn > log.txt'), SW_HIDE)>31 then BitBtn 2. Enabled := true // выполняем команду и сохраняем лог в log . txt else Bitbtn2.Enabled:=false; end; end. Листинг модуля Connect .pas unit Connect; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ComCtrls; procedure tmrTraff(lvTraffic:TListView); type TMibIfRow = packed record wszName : array[0..255] of WideChar; // Указатель на строку содержащую имя интерфейса dwIndex : DWORD;// Определяет индекс интерфейса dwType : DWORD; // Определяет тип интерфейса ( см . MSDN) dwMtu : DWORD; //Определяет максимальную скорость передачи dwSpeed : DWORD; //Определяет текущую скорость передачи в битах в секунду dwPhysAddrLen : DWORD;//Определяет длину адреса содержащегося в bPhysAddr bPhysAddr : array[0..7] of Byte;// Содержит физический адрес интерфейса (если проще то его, немного видоизмененный, МАС адрес) dwAdminStatus : DWORD;//Определяет активность интерфейса dwOperStatus : DWORD; // Содержит текущий статус интерфейса (см. MSDN) dwLastChange : DWORD;// Содержит последний измененный статус dwInOctets : DWORD;// Содержит количество байт принятых через интерфейс dwInUcastPkts : DWORD; // Содержит количество направленных пакетов принятых интерфейсом dwInNUCastPkts : DWORD; //Содержит количество ненаправленных пакетов принятых интерфейсом (включая Броадкаст и т.п.) dwInDiscards : DWORD;// Содержит количество забракованных входящих пакетов (даже если они не содержали ошибки) dwInErrors : DWORD; // Содержит количество входящих пакетов содержащих ошибки dwInUnknownProtos : DWORD;// Содержит количество забракованных входящих пакетов со структурой неизвестного протокола dwOutOctets : DWORD; //Содержит количество байт отправленных интерфейсом dwOutUCastPkts : DWORD; //Содержит количество направленных пакетов отправленных интерфейсом dwOutNUCastPkts : DWORD; //Содержит количество ненаправленных пакетов отправленных интерфейсом (включая Броадкаст и т.п.) dwOutDiscards : DWORD; //Содержит количество забракованных исходящих пакетов (даже если они не содержали ошибки) dwOutErrors : DWORD; // Содержит количество исходящих пакетов содержащих ошибки Приложение Б (продолжение) dwOutQLen : DWORD; // Содержит длину очереди данных dwDescrLen : DWORD; //Содержит размер массива bDescr bDescr : array[0..255] of Char;// Содержит описание интерфейса end; TMibIfArray = array [0..512] of TMibIfRow; PMibIfRow = ^TMibIfRow; PmibIfArray = ^TmibIfArray; TMibIfTable = packed record dwNumEntries : DWORD; Table : TMibIfArray; end; PMibIfTable = ^ TMibIfTable; var GetIfTable:function(pIfTable: PMibIfTable;pdwSize : PULONG;bOrder : Boolean ): DWORD; stdcall; implementation procedure tmrTraff(lvTraffic:TListView); // Вспомогательная функция, преобразующая МАС адрес к "нормальному" виду //Определяем специальный тип, чтобы можно было передать в функцию массив type TMAC = array [0..7] of Byte; //В качестве первого значения массив, второе значение, размер данных в массиве function GetMAC(Value: TMAC; Length: DWORD): String; var i: Integer; begin if Length = 0 then Result := '00-00-00-00-00-00' else begin Result := ''; for i:= 0 to Length -2 do Result := Result + IntToHex(Value[i],2)+'-'; Result := Result + IntToHex(Value[Length-1],2); end; end; // Сама процедура var FLibHandle : THandle; Table : TMibIfTable; i : Integer; Size : Integer; begin lvTraffic.Items.BeginUpdate; lvTraffic.Items.Clear; // Очищение списка FLibHandle := LoadLibrary('IPHLPAPI.DLL'); // Загрузка библиотеки if FLibHandle = 0 then Exit; @GetIfTable := GetProcAddress(FLibHandle, 'GetIfTable'); if not Assigned(GetIfTable) then begin FreeLibrary(FLibHandle); exit; end; Size := SizeOf(Table); if GetIfTable(@Table, @Size, False ) = 0 then //Выполнение функции for i:= 0 to Table.dwNumEntries-1 do begin with lvTraffic.Items.Add do begin // Вывод результата Caption := String(Table.Table[i].bDescr); // Наименование интерфейса SubItems.Add(GetMAC(TMAC(Table.Table[i].bPhysAddr), Table.Table[i].dwPhysAddrLen)); //MAC адрес SubItems.Add(IntToStr(Table.Table[i].dwInOctets)); // Всего принято байт SubItems.Add(IntToStr(Table.Table[i].dwOutOctets)); // Всего отправлено байт end ; end ; Приложение Б ( продолжение ) lvTraffic.Items.EndUpdate; FreeLibrary(FLibHandle); end; end. Листинг модуля NetIFEnum .pas unit NetIFEnum; interface uses Windows, SysUtils, Classes, Controls, Forms, ComCtrls; const MAX_ADAPTER_NAME_LENGTH = 256; MAX_ADAPTER_DESCRIPTION_LENGTH = 128; MAX_ADAPTER_ADDRESS_LENGTH = 8; IPHelper = 'iphlpapi.dll'; // Типы адаптеров MIB_IF_TYPE_OTHER = 1; MIB_IF_TYPE_ETHERNET = 6; MIB_IF_TYPE_TOKENRING = 9; MIB_IF_TYPE_FDDI = 15; MIB_IF_TYPE_PPP = 23; MIB_IF_TYPE_LOOPBACK = 24; MIB_IF_TYPE_SLIP = 28; type // Структуры для выполнения GetAdaptersInfo time_t = Longint; IP_ADDRESS_STRING = record S: array [0..15] of Char; end; IP_MASK_STRING = IP_ADDRESS_STRING; PIP_MASK_STRING = ^IP_MASK_STRING; PIP_ADDR_STRING = ^IP_ADDR_STRING; IP_ADDR_STRING = record Next: PIP_ADDR_STRING; IpAddress: IP_ADDRESS_STRING; IpMask: IP_MASK_STRING; Context: DWORD; end; PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO; IP_ADAPTER_INFO = record Next: PIP_ADAPTER_INFO; ComboIndex: DWORD; AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char; Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char; AddressLength: UINT; Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of BYTE; Index: DWORD; Type_: UINT; DhcpEnabled: UINT; CurrentIpAddress: PIP_ADDR_STRING; IpAddressList: IP_ADDR_STRING; GatewayList: IP_ADDR_STRING; DhcpServer: IP_ADDR_STRING; HaveWins: BOOL; PrimaryWinsServer: IP_ADDR_STRING; SecondaryWinsServer: IP_ADDR_STRING; LeaseObtained: time_t; LeaseExpires: time_t; end; procedure ReadLanInterfaces(tvInterfaces:tTreeView); // При помощи данной функции определяется наличие сетевых интерфейсов Приложение Б (продолжение) // на локальном компьютере и информацию о них function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO; var pOutBufLen: ULONG): DWORD; stdcall; external IPHelper; implementation // Считывание всех IP адреса со всех присутствующих // в системе сетевых интерфейсов procedure ReadLanInterfaces(tvInterfaces:TTreeView); function MACToStr(Addr: array of Byte; Len: Integer): String; var I: Integer; begin if Len = 0 then Result := '00-00-00-00-00-00' else begin Result := ''; for I := 0 to Len - 2 do Result := Result + IntToHex(Addr[I], 2) + '-'; Result := Result + IntToHex(Addr[Len - 1], 2); end; end; function TimeToDateTimeStr(Value: Integer): String; const UnixDateDelta = 25569; // количество дней между 12.31.1899 и 1.1.1970 MinPerDay = 24 * 60; SecPerDay = 24 * 60 * 60; var Data: TDateTime; TimeZoneInformation: TTimeZoneInformation; AResult: DWORD; begin Result := ''; if Value = 0 then Exit; // Формат Unix-ового TIME_T кол-во секунд от 1.1.1970 Data := UnixDateDelta + (Value / SecPerDay); AResult := GetTimeZoneInformation(TimeZoneInformation); case AResult of TIME_ZONE_ID_INVALID: RaiseLastOSError; TIME_ZONE_ID_STANDARD: begin Data := Data - ((TimeZoneInformation.Bias + TimeZoneInformation.StandardBias) / MinPerDay); Result := DateTimeToStr(Data) + ' ' + WideCharToString(TimeZoneInformation.StandardName); end; else Data := Data - ((TimeZoneInformation.Bias + TimeZoneInformation.DaylightBias) / MinPerDay); Result := DateTimeToStr(Data) + ' ' + WideCharToString(TimeZoneInformation.DaylightName); end; end; var InterfaceInfo, TmpPointer: PIP_ADAPTER_INFO; IP: PIP_ADDR_STRING; Len: ULONG; AdapterTree, IPAddrTree, DHCPTree, WinsTree: TTreeNode; AdapterType : String ; begin // сколько памяти нам требуется? if GetAdaptersInfo(nil, Len) = ERROR_BUFFER_OVERFLOW then begin Приложение Б (продолжение) // Берется нужное кол-во GetMem(InterfaceInfo, Len); try // выполнение функции if GetAdaptersInfo(InterfaceInfo, Len) = ERROR_SUCCESS then begin // Перечисление всех сетевых интерфейсов TmpPointer := InterfaceInfo; repeat // Имя сетевого интерфейса AdapterTree := tvInterfaces.Items.Add(nil, 'Adapted: ' + TmpPointer^.AdapterName); // Описание сетевого интерфейса tvInterfaces.Items.AddChild(AdapterTree, 'Description: ' + TmpPointer^.Description); // МАС Адрес tvInterfaces.Items.AddChild(AdapterTree, 'МАС: ' + MACToStr(TmpPointer^.Address, TmpPointer^.AddressLength)); // Индекс адаптера в списке tvInterfaces.Items.AddChild(AdapterTree, 'Index: ' + IntToStr(TmpPointer^.Index)); // Тип адаптера case TmpPointer^.Type_ of MIB_IF_TYPE_OTHER: AdapterType := 'MIB_IF_TYPE_OTHER'; MIB_IF_TYPE_ETHERNET: AdapterType := 'MIB_IF_TYPE_ETHERNET'; MIB_IF_TYPE_TOKENRING: AdapterType := 'MIB_IF_TYPE_TOKENRING'; MIB_IF_TYPE_FDDI: AdapterType := 'MIB_IF_TYPE_FDDI'; MIB_IF_TYPE_PPP: AdapterType := 'MIB_IF_TYPE_PPP'; MIB_IF_TYPE_LOOPBACK : AdapterType := 'MIB_IF_TYPE_LOOPBACK'; MIB_IF_TYPE_SLIP : AdapterType := 'MIB_IF_TYPE_SLIP'; else AdapterType := 'Unknown'; end; tvInterfaces.Items.AddChild(AdapterTree, 'Type: ' + AdapterType); // определение активности DHCP if Boolean(TmpPointer^.DhcpEnabled) then begin DHCPTree := tvInterfaces.Items.AddChild(AdapterTree, 'DHCP: Enabled'); // Адрес DHCP сервера tvInterfaces.Items.AddChild(DHCPTree, 'DHCP IP Addr: ' + String(TmpPointer^.DhcpServer.IpAddress.S)); // Время получения данных от сервера tvInterfaces.Items.AddChild(DHCPTree, 'LeaseObtained: ' + TimeToDateTimeStr(TmpPointer^.LeaseObtained)); // Время устаревания данных от сервера tvInterfaces.Items.AddChild(DHCPTree, 'LeaseExpires: ' + TimeToDateTimeStr(TmpPointer^.LeaseExpires)); end else tvInterfaces.Items.AddChild(AdapterTree, 'DHCP: Disabled'); // перечислиние всех IP адресов интерфейса IP := @ TmpPointer . IpAddressList ; IPAddrTree := tvInterfaces.Items.AddChild(AdapterTree, 'IP Addreses:'); repeat tvInterfaces.Items.AddChild(IPAddrTree, Format('IP: %s, SubNetMask: %s', [String(IP^.IpAddress.S), String(IP^.IpMask.S)])); IP := IP.Next; until IP = nil; // основной шлюз: tvInterfaces.Items.AddChild(AdapterTree, 'Default getaway: ' + TmpPointer^.GatewayList.IpAddress.S); // Windows Internet Name Service if TmpPointer^.HaveWins then Приложение Б (продолжение) begin WinsTree := tvInterfaces.Items.AddChild(AdapterTree, 'WINS: Enabled'); // основной WINS tvInterfaces.Items.AddChild(WinsTree, 'PrimaryWinsServer: ' + String(TmpPointer^.PrimaryWinsServer.IpAddress.S)); // запасной WINS tvInterfaces.Items.AddChild(WinsTree, 'SecondaryWinsServer: ' + String(TmpPointer^.SecondaryWinsServer.IpAddress.S)); end else tvInterfaces.Items.AddChild(AdapterTree, 'WINS: Disabled'); TmpPointer := TmpPointer.Next; until TmpPointer = nil; end; finally // Освобождение занятой память FreeMem(InterfaceInfo); end; end; end; end. Листинг модуля Tracer .pas unit Tracer; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Winsock; const MAX_PACKET_SIZE = $10000; SIO_RCVALL = $98000001; procedure TCreate; procedure TClose; type USHORT = Word; TIPHeader = record iph_verlen: UCHAR; iph_tos: UCHAR; iph_length: USHORT; iph_id: USHORT; iph_offset: USHORT; iph_ttl: UCHAR; iph_protocol: UCHAR; iph_xsum: USHORT; iph_src: ULONG; iph_dest: ULONG; end; PIPHeader = ^TIPHeader; var Buffer: array [0..MAX_PACKET_SIZE] of Char; flag: Integer; hThread: Cardinal; implementation uses Unit1; procedure TClose; begin while not TerminateThread(hThread,0) do Sleep(500); end; procedure ListenThread(LV: TListView); stdcall; Приложение Б (продолжение) var lowbyte, hibyte: USHORT; wsadata: TWSAData; s: TSocket; name: array [0..128]of Char; phe: PHostent; sa: TSockAddrIn; sa1: TInAddr; count: Integer; hdr: PIPHeader; begin flag:=1; WSAStartup(MAKEWORD(2,2), wsadata); s := socket(AF_INET, SOCK_RAW, IPPROTO_IP); gethostname(name, sizeof(name)); phe := gethostbyname(name); ZeroMemory(@sa, sizeof(sa)); sa.sin_family := AF_INET; sa.sin_addr.s_addr := cardinal(pointer(phe^.h_addr_list^)^); bind(s, sa, sizeof(TSockaddr)); ioctlsocket(s, SIO_RCVALL, flag); repeat count := recv(s, Buffer, sizeof(Buffer), 0); if (count >= sizeof(TIPHeader)) then with LV.Items.Add do begin hdr := @Buffer; Caption:= TimeToStr(Time); case hdr.iph_protocol of IPPROTO_TCP: SubItems.Add('TCP'); IPPROTO_UDP: SubItems.Add('UDP'); IPPROTO_RAW: SubItems.Add('RAW'); IPPROTO_ICMP: SubItems.Add('ICMP'); IPPROTO_IGMP: SubItems.Add('IGMP'); IPPROTO_IP: SubItems.Add('IP'); else SubItems.Add('Неизвестен') end; sa1.s_addr := hdr.iph_src; SubItems.Add(inet_ntoa(sa1)); sa1.s_addr := hdr.iph_dest; SubItems.Add(inet_ntoa(sa1)); lowbyte := hdr.iph_length shr 8; hibyte := hdr.iph_length shl 8; hibyte := hibyte + lowbyte; SubItems.Add(IntToStr(hibyte)); SubItems.Add(IntToStr(hdr.iph_ttl)); end; until false; end; procedure TCreate; //1 var ThID: Cardinal; begin hThread:=CreateThread(nil,0,@ListenThread,Form1.TV1,0,ThID); if hThread=0 then ShowMessage(SysErrorMessage(GetLastError)); end; end.
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
ЦРУ никогда не выкрадет Эдварда Сноудена из России, так как он надёжно прикреплен к районной поликлинике.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

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

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru