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

Курсовая

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

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

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

закрыть
Категория: Курсовая работа
Язык курсовой: Русский
Дата добавления:   
 
Скачать
Архив Zip, 267 kb, скачать бесплатно
Обойти Антиплагиат
Повысьте уникальность файла до 80-100% здесь.
Промокод referatbank - cкидка 20%!
Заказать
Узнать стоимость написания уникальной курсовой работы

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

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 - 2017
Рейтинг@Mail.ru