Реалізація аналізатора мережевого трафіку на основі нейронної мережі Кохонена

Бібліотека Pcap та її реалізація WinPcap під платформу Windows. Аспекти робот з бібліотекою WinPcap. Штучні нейронні мережі. Застосування бібліотеки Winpcap для захоплення мережевого трафіку. Реалізація нейронної мережі Кохонена для аналізу заголовків.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 09.06.2012
Размер файла 2,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Київський національний університет імені Тараса Шевченка

Радіофізичний факультет

Кафедра комп'ютерної інженерії

РЕАЛІЗАЦІЯ АНАЛІЗАТОРА МЕРЕЖЕВОГО ТРАФІКУ НА ОСНОВІ НЕЙРОННОЇ МЕРЕЖІ КОХОНЕНА

Випускна кваліфікаційна робота магістра

студента 2 курсу

(кваліфікаційний рівень «Магістр»)

спеціалізації

«Автоматизація наукових досліджень»

Київ 2012р.

РЕФЕРАТ

Створено програмне застосування для захоплення мережевого трафіку та відокремлення ip заголовку з метою подальшої кластеризації з використанням нейронної мережі Кохонена. Попередньо досліджено нейронну мережу Кохонена для вирішення задач кластеризації з використанням архітектури Pcap та власне її реалізацію для платформи Windows WinPcap, як інструментального засобу для захоплення мережевого трафіку та проаналізовано доцільність використання даного підходу для розробки мережевого аналізатора. Отримані результати кластеризації та обгрунтовано можливі причини отриманих даних.

Ключові слова: НЕЙРОННІ МЕРЕЖІ, НЕЙРОННА МЕРЕЖА КОХОНЕНА САМОРГАНІЗАЦІЙНА КАРТА КОХОНЕНА, АНАЛІЗ МЕРЕЖЕВОГО ТРАФІКУ, PCAP, WINPCAP, СНІФЕРИ, ЗАДАЧА КЛАСТЕРИЗАЦІЇ, СОКЕТИ.

Вступ

В сучасних умовах з розвитком комп'ютерних мереж та тісну інтеграцію цих новітніх систем у повсякденне життя виникає необхідність контролю та аналізу мережевого трафіку. Внаслідок збільшення пропускної здатності комп'ютерних мереж, кількість пакетів для аналізу ,що проходить за одиницю часу через мережу стає надто великою для обробки цих пакетів стандартними засобами. Отже виникає необхідність у нестандартному підході до аналізу мережевого трафіку. Це реалізується за допомогою нейронної мережі Кохонена, що надає можливість аналізувати мережевий трафік за певними критеріями, які власне визначаються самою нейромережею. В результаті цього непотрібно створювати спеціальні аналізатори та фільтри, які б використовували багато ресурсів комп'ютера та розроблялися протягом тривалого періоду часу. Отже метою даної роботі досліджується можливість використання такого аналізатора з використанням ресурсів ЦП комп'ютера.

1. Огляд літератури

1.1. Мережевий аналізатор

1.1.1. Бібліотека pcap та її реалізація WinPcap під платформу Windows

Бібліотека Pcap (Packet Capture) дозволяє створювати програми аналізу мережевих даних, що надходять на мережеву карту комп'ютера. Прикладом програмного забезпечення, що використовує бібліотеку Pcap, служить програма Wireshark. Різноманітні програми моніторингу та тестування мережі, сніфери використовують цю бібліотеку. Вона написана для використання мови C / C, так що інші мови, такі як Java,. NET і скриптові мови, використовують оболонку [1]. Для Unix-подібних систем використовують libpcap бібліотеку, а для Microsoft Windows використовують WinPcap бібліотеку. Програмне забезпечення мережевого моніторингу може використовувати libpcap або WinPcap, щоб захопити пакети, які подорожують по мережі, і (в новіших версіях) для передачі пакетів у мережі. Libpcap і WinPcap також підтримують збереження захоплених пакетів у файл і читання файлів, що містять збережені пакети. Програми, написані на основі libpcap або WinPcap, можуть захопити мережевий трафік, аналізувати його. Файл захопленого трафіку зберігається у форматі, зрозумілому для додатків, що використовують Pcap.

Як вже зазначалося бібліотек pcap використовується для написання сніферів, що являють собою програму, яка дозволяє перехоплювати мережевий трафік. Прослуховування можливе завдяки особливості архітектури мережі Ethernet (IEEE 802.3). Архітектура більшості локальних мереж заснована на технології Ethernet (ether - ефір, network - мережа), в якій всі пристрої підключені до однієї середовища передачі даних і спільно її використовують. Топологія мережі Ethernet - лінійна або зіркоподібна, а швидкість передачі даних 10, 100 і 1000 Мбіт/сек. Ethernet - це широкомовна мережа, в якій всі вузли можуть брати всі повідомлення через єдину магістраль. Використовуючи цю особливість Ethernet, відпадає необхідність несанкціонованого підключення до сегмента мережі. Комп'ютер, з якого передбачається прослуховувати, вже підключений до деякого сегмента мережі.

Сніфер може аналізувати тільки те, що проходить через його мережну карту. Всередині одного сегмента мережі Ethernet всі пакети розсилаються всім машинам, через це можливо перехоплювати чужу інформацію. Використання комутаторів (switch, switch-hub) та їх грамотна конфігурація вже є захистом від прослуховування. Між сегментами інформація передається через комутатори. Комутація пакетів - форма передачі, при якій дані, розбиті на окремі пакети можуть пересилатися з вихідного пункту в пункт призначення різними маршрутами.

Прослуховуючі програми або пакетні аналізатори відносяться до класу утиліт подвійного призначення. З одного боку сніфери - могутня зброя, за допомогою якого можна здійснити пасивну мережну атаку. Ці програми можуть являти собою серйозну загрозу, оскільки можуть перехоплювати і розшифровувати імена і паролі користувачів, конфіденційну інформацію, порушувати роботу окремих комп'ютерів і мережі в цілому. Відомо, що в більшості протоколів передачі даних (FTP, POP, HTTP, telnet) секретна інформація між клієнтом і сервером передається відкритим текстом, що дозволяє без особливих складнощів отримати доступ до чужої інформації. З іншого боку сніфери надають можливість здійснювати діагностику мережі і відстежувати атаки комп'ютерних хуліганів. Крім того, вони служать для перевірки і детального аналізу правильності конфігурації мережевого програмного забезпечення [2].

WinPcap є відкритою бібліотекою для захоплення пакетів і аналізу мережі для платформ Win32. Більшість мережевих програм отримують доступ до мережі через широко використовуваних сокетів операційної системи. Легко отримати доступ до даних по мережі з цим підходом, оскільки операційна система справляється з протоколами нижніх рівнів (протокол обробки, складання пакетів і т.д.) і надає легкий та зрозумілий інтерфейс, аналогічний тому, який використовується для читання і запису файлів.

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

Мета WinPcap - надати такий доступ для Win32-програм. Дана бібліотека надає можливості для:

- захоплення низькорівневих пакетів, що, призначені для комп'ютера де це використовужться, так і пакетів якими обмінюються інші хости мережі (broadcast, multicast).

- фільтрації пакетів відповідно до зазначених правил перед використаням їх у застосуваннях

- передавати пакети в мережу

- збір статистичної інформації про трафік мережі

Це можливості реалізуються за допомогою драйвера, який встановлений в мережній чатині Win32 ядра, та за допомогою певних динамічних бібліотек системи. Всі ці властивості експортуються через потужний інтерфейс програмування, легко використовуються програмами і доступні на різних ОС [3].

Інтерфейс WinPcap може бути використаний різними типами мережевих утиліт для аналізу, діагностики, безпеки та моніторингу. Класичні інструменти, що доступні в WinPcap є:

- аналізатор протоколів та мережевий аналізатор

- мережеві монітори

- реєстрація трафіку

- генератори трафіку

- мости і маршрутизатори рівня користувача

- системи виявлення вторгнень (NIDS)

- мережеві сканери

- засоби безпеки

WinPcap приймає і відправляє пакети незалежно від протоколів, таких як TCP-IP. Це означає, що неможливо блокувати, фільтрувати або керувати трафіком, що генерується іншими програмами на одному комп'ютері, можливо лише аналізувати пакети що потрапляють на мережеву карту. Таким чином, не забезпечується підтримка таких програм, як QoS планувальник та персональні фаєрволи.

1.1.2. Основні аспекти робот з бібліотекою WinPcap

WinPcap це архітектура для захоплення пакетів і аналізу мережі для платформ Win32. Вона включає в себе фільтр пакетів на рівні ядра, бібліотеки динамічного компонування (packet.dll), та і системно-незалежні бібліотеки (wpcap.dll). WinPcap являє собою архітектуру, а не тільки бібліотеку. Це пояснюється тим, що для захоплення пакетів низького рівня вимагає тісної взаємодії з мережевим адаптером та операційною системою, зокрема при його мережевій реалізації, тому проста бібліотека є недостатньою [3].

На рисунку 1.1 зображено різні компоненти архітектури WinPcap.

Рис. 1.1 Архітектура WinPcap.

По-перше, для захоплення пакетів WinPcap потребує обходу стека протоколів операційної системи, для того щоб отримати доступ до «сирих» даних що отримуються з мережі. Для цього необхідна частина WinPcap, що працює всередині ядра операційної системи та взаємодіє безпосередньо з драйверами мережевих інтерфейсів. Ця частина суттєво залежить від версії операційної системи, і в WinPcap вона реалізована у вигляді драйвера пристрою або Netgroup Packet Filter (NPF). А отже існують окремі реалізації під різні версії Windows. Ці драйвери надають такі основні функції як захоплення та посилання пакетів в мережу, програмовану систему фільтрації та моніторингу пакетів. Це дозволяє захопити мережевий трафік певного виду (наприклад, можна захопити тільки FTP-трафік, що генерується певним хостом)та оримати статистичних даних мережевого трафіку (наприклад, можна отримати навантаження мережі або кількість даних, переданих між двома вузлами) [4].

По-друге, система повинна експортувати інтерфейс, який будуть використовувати програми на рівні користувача для користуванням засобами драйвера рівня ядра. Для реалізації цього WinPcap надає дві різних бібліотек: packet.dll і wpcap.dll.

Перша пропонує низькорівневий API, що може бути використана для прямого доступу до функцій драйвера, з програмуванням інтерфейсу незалежно від ОС.

Друга надає потужний набір високорівневих інструментів, які сумісні з Libpcap (реалізація pcap для Unix - подібних систем). Це дозволяє захоплювати пакети незалежно від виду мережевої карти та ОС.

1.1.3. Архітектура драйвера пристрою NPF як складова бібліотеки WinPcap

Як вже було зазначено в попрередньому розділі, що Netgroup Packet Filter (NPF) - складова WinPcap яка працює на рівні ядра. Даний компонент виконує найважливішу функцію, а власне захоплює пакети що йдуть по мережі та обробляє їх для подальшого аналізу захоплених пакетів на рівні користувача.

NDIS (Network Driver Interface Specification) - стандарт що визначає комунікацію між мережевим адаптером (або драйвер що ним керує) та драйвером протоколу (напр.. TCP/IP). Основна мета NDIS бути певною оболонкою яка дозволяє драйверам протоколів відправляти та отримувати пакети з мережі (локальної або глобальної) не залежyj від типу мережевого адаптера та типу операційної системи Win32.

NDIS підтримує три типи мережевих драйверів:

1. Драйвер мережевої інтерфейсної карти (NIC драйвер). NIC драйвер безпосередньо керує мережевою інтерфейсною картою. Інтерфейс NIC драйверу що відноситься безпосередньо до обладнання надає верхнійм рівням інтерфейс, що дозволяє їм відправляти пакети в мережу, керувати перериванням, перезавантажувати, припиняти діяльність та встановлювати певні характеристики мережевої карти. NIC драйвер може бути як певним мініпортом так і традиційним повноцінним драйвером пристрою:

· Реалізація драйверу мініпорту виконує тільки апаратно-специфічні операції, необхідні для управління мережевою картою в тому числі прийом та передачу даних на карту. Загальні операції що відносяться до низькорівневих NIC драйверів, таких як синхронізація, забезпечуються NDIS. Мініпорти не являється процедурою операційної системи; їхній інтерфейс для операційної системи це NDIS. Мініпорт не відслідковує прив'язок, він тільки передає пакети до NDIS та NDIS гарантує, що ці пакети передаються відповідним протоколам.

· Повні NIC драйвери були створені для апаратно-специфічних операцій та для всіх синхронізаційних операцій та роботи з чергою, що зазвичай здійснюються за допомогою NDIS. Повні NIC драйвери, наприклад, можуть зберегти свою інформацію зв'язування для індикації отриманих даних.

2. Проміжний драйвер. Проміжний драйвер - інтерфейс між драйвером верхніх рівнів, таких як драйвер протоколу, та міні портом. Для драйверів верхніх рівнів, проміжний драйвер - так як мініпорт. Для мініпорта драйвера верхніх рівнів - драйвера протоколу. Проміжний драйвер протоколу може лежати зверху над іншими проміжними драйверами, проте таке шарування може негативно вплинути на продуктивність системи. Типова причина розробки проміжного драйверу це забезпечення трансляції даних між традиційними драйверами протоколу та мініпортом що керує мережевою картою при нових типах даних що невідомі для драйверу протоколу. Наприклад проміжний драйвер може перевести з LAN протоколу в ATM протокол. Проміжний драйвер не може комунікувати з програмами користувача на відміну від інших драйверів NDIS.

3. Драйвери протоколів або транспортні драйвера. Драйвер протоколу реалізує мережевий стек протоколів таких як IPX/SPX чи TCP/IP, надаючи сервіси однієї або декількох мережевих карт. Сервіси драйверу протоколу рівня користувача дають можливість користувачу підключитися до одного або більше мережевих драйверів або проміжних NDIS драйверів на нижчих рівнях.

NPF створений як драйвер протоколу. Це не найкращий вибір з точки зору продуктивності, проте це надає раціональну незалежність від MAC рівня та доступ до необробленого (сирого) трафіку. Різні версії операційної системи Win32 містять різні версії NDIS: NPF це NDIS 5 сумісний з Windows 2000 та його похідними (такими як Windows XP), NDIS 3 сумісний з іншими платформами Win32. Рисунок 1.2 демонструє позицію NPF всередині стеку NDIS.

Рис. 1.2 NPF всередині стеку NDIS

Взаємодія з операційною системою зазвичай асинхронна. Це свідчить про те, що драйвер забезпечує множину функцій зворотніх викликів які використовуються системою коли деякі операції для NPF назначені. NPF експортує функції зворотніх викликів для всіх операцій вводу/виводу: відкриття, закриття, читання, запис і т.д.

Взаємодія з NDIS також є асинхронною: події такі як прибуття нових пакетів повідомляється NPF через функцій зворотніх викликів (Packet_tap() у даному випадку). Крім того взаємодія між NDIS та NIC драйверами здійснються за допомогою не блокуючих функцій: коли NPF викликає NDIS функції, відповідь повертається моментально ; коли обробляється закінчення NDIS використовує специфічний зворотній виклик NPF для інформування що функція закінчилася. Драйвер експортує зворотній виклик для любих низькорівневих операцій, таких як відправлення пакетів, заданя або отримання параметрів мережевої карти і т.д.

На рисунку 1.3 зображено структура WinPcap з частковим посиланням на драйвер NPF.

Рис. 1.3 Драйвер пристрою NPF

NPF спроможний виконувати багато різних операцій: захоплення, моніторинг, робити дамп на диск, інжекція пакетів.

Найбільщ важлива операція NPF це захоплення пакетів. Впродовж захоплення виловлює пакети використовуючи інтерфейс мережевої карти і доставляє їх до програм рівня користувача.

Процес захоплення залежить від двох основних компонент:

· Фільтр пакетів який прийняв вхідний пакет, копіює його до очікуваного програми. Більшість програм що використовують NPF відхиляють більшість пакетів які отримали, тому різносторонній та ефективний фільтр пакетів критичний для швидкодії. Фільтр пакетів - це функція що повертає 1 або 0. Якщо вона повернула 1 - драйвер захоплення копіює пакет до програми; якщо 0 - пакет відхилений. Фільтр пакетів NPF більш складний тому що він вирішує не питання не тільки про прийняття пакету але і кількість біт, що будуть передані. Система фільтрації NPF походить від BSD фільтру пакетів (BPF) - віртуальний процесор що надає можливість виконувати програми фільтрації виражені через псевдо асемблер і створені на рівні користувача. Програма використовує визначений користувачем фільтр і застосовуючи winpcap.dll компілює її в BPF програму. Потім програма використовує BIOCSETF IOCTL для інжекції фільтра в ядро. З цього моменту програма виконується для кожного вхідного пакету. На протиріччя традиційним рішенням, NPF не інтерпретує фільтри, проте виконує їх.

· Циклічний буфер для отримання пакетів і уникнути від втрат. Пакет поміщається в буфер з заголовком який містить інформацію таку як час пакету та його розмір. Група пакетів може бути скопійована з NPF буфера в програму за допомогою однієї операції. Це підвищує швидкодію тому що мінімізує кількість зчитувань. Якщо буфер повний, то нові пакети ігноруються. Буфера ядра та користувача можуть бути змінені в процесі виконання програми для досягнення максимальної гнучкості: packet.dll та wpcap.dll забезпечують функції що реалізовують це.

Розмір буфера дуже важливий, адже від цього залежить максимальна кількість даних яка може бути скопійована з області видимотсі ядра до області видимості користувача за один виклик. З іншої сторони мінімальна кількість даних що може бути прочитана також дуже важлива. При наявності великого значення для цієї змінної, ядро чекає прибуття кількох пакетів перед тим як копіювати дані до користувача. Це гарантує низьке число системних викликів, наприклад, низьке завантаження процесора, що є хорошою характеристикою для таких програм як аналізатори. З іншого боку, мала величина буфера означає, що ядро буде копіювати пакети, як тільки програма буде готовою їх прийняти. Це чудово підходить для систем реального часу (як, наприклад, ARP перенаправлення або мости), які потребують кращої чуйності від ядра. З цієї точки зору, NPF гнучкість у налаштованні, що дозволяє користувачеві вибирати між кращою ефективністю та кращої чуйності (чи будь-яке проміжне положення).

Бібліотека wpcap включає в себе пару системних викликів, які можуть бути використані як для установки тайм-ауту, після якого закінчується читання і мінімальний обсяг даних, які можуть бути передані до програми. За замовчуванням таймаут складає 1 секунду, а мінімальна кількість даних, переданих з ядра до програми складає 16K.

WinPcap пропонує програмований модуль моніторингу рівня ядра, що здатний розрахувати прості статистичні дані про мережевий трафік. Ідея цього модуля показана на малюнку рисунку 1.3. Статистика може бути отримана без необхідності копіювання пакетів в застосування, яке просто отримує і відображає результати, отримані від засобу моніторингу. Це дозволяє уникнути значної частки накладних захоплень в термінах тактів процесора та пам'яті.

Можливість дампу на диск може бути використана для збереження даних мережі прямо з області ядра на диск.

Рис.1.4 Захоплення пакетів в порівнянні з дампом рівня ядра

У традиційних системах шлях, пройдений пакетами, що зберігаються на диск, відповідає чорним стрілкам на рисунку 1.4: кожен пакет копіюється кілька разів, і зазвичай виділяються 4 буфера: один з драйверу захоплення, один в застосуванні, що зберігає отримані дані, одним з stdio функції (або аналогічний), які використовуються додатком для запису у файл і, нарешті, один з файлової системи.

Коли активовано властивість NPF обліку трафіку на рівні ядра, драйвер захоплення розглядається файлової системою безпосередньо, отже, шлях, пройдений пакетами показаний червоною пунктирної стрілкою: тільки два буфера і одна копія необхідні, кількість системних викликів різко знижується, тому продуктивність значно краще.

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

бібліотека winpcap мережа нейронний

1.2. Нейронні мережі Кохонена

1.2.1. Задача кластеризації

Експеримент навчання без вчителя при вирішенні задачі розпізнавання образів можна сформулювати як завдання кластерного аналізу.

Кластерний аналіз (Data clustering) - завдання розбиття заданої вибірки об'єктів (ситуацій) на підмножини, що називаються кластерами, так, щоб кожен кластер складався з схожих об'єктів, а об'єкти різних кластерів істотно відрізнялися. Завдання кластеризації відноситься до статистичної обробки, а також до широкого класу задач навчання без вчителя. Кластерний аналіз - це багатовимірна статистична процедура, що виконує збір даних, що містять інформацію про вибірку об'єктів, і потім впорядковує об'єкти в порівняно однорідні групи (кластери) (Q-кластеризація, або Q-техніка, власне реамбулиі аналіз). Кластер - група елементів, якi характеризуються загальною властивістю, головна мета кластерного аналізу - знаходження груп схожих об'єктів у вибірці [5].

Кластеризація є головним завданням дослідного аналізу даних. Спектр застосувань кластерного аналізу дуже широкий: його використовують в археології, медицині, психології, хімії, біології, державному управлінні, філології, антропології, маркетингу, соціології та інших дисциплінах. Однак універсальність застосування призвела до появи великої кількості несумісних термінів, методів і підходів, що ускладнюють однозначне використання і несуперечливу інтерпретацію кластерного аналізу.

Кластерний аналіз не являється конкретним алгоритмом , але в цілому задача повинна бути вирішена. Це може бути досягнуто різними алгоритмами, які суттєво відрізняються за своїм поняттями, що представляє собою кластер і як метод ефективного його знаходження. Поняття кластерів можна інтерпретувати як групи з невеликими відстанями між членами кластеру, щільні області простору даних, інтервали що підпорядковуються конкретним статистичним розподілам. Відповідний алгоритм кластеризації та параметрів (у тому числі цінності, такі як функція відстані, гранична щільність і кількість очікуваних кластерів) залежить від індивідуальних наборів даних і передбачуване використання результату. Кластерний аналіз не є автоматичною задачою, а являється повторюваним процесом виявлення знань, що включає спроби і невдачі. Часто виникає необхідність у зміні параметрів обробки, доки результат не досягне бажаних властивостей.

Крім терміну кластеризації існує ряд термінів з аналогічними значеннями, включаючи автоматичну класифікацію , чисельні таксономії , botryology (від грецького вьфсхт «виноград») і типологічний аналіз. Це часто призводить до непорозумінь дослідників найближчі з галузі вивчення інтелектуального аналізу даних і машини, оскільки вони використовують ті ж терміни і часто ті ж алгоритми, але мають різні цілі.

На рисунку 1.5 зображено приклад кластеризації: розділення певної множини вхідних даних на площині на групи (кластери).

Рис. 1.5. Приклад кластеризації.

1.2.2. Штучні нейронні мережі

Штучні нейронні мережі (ШНМ) -- математичні моделі, а також їхня програмна та апаратна реалізація, побудовані за принципом функціонування біологічних нейронних мереж -- мереж нервових клітин живого організму. Системи, архітектура і принцип дії базується на аналогії з мозком живих істот. Ключовим елементом цих систем виступає штучний нейрон як імітаційна модель нервової клітини мозку -- біологічного нейрона. Даний термін виник при вивченні процесів, які відбуваються в мозку, та при спробі змоделювати ці процеси [6]. Першою такою спробою були нейронні мережі Маккалока і Піттса. Як наслідок, після розробки алгоритмів навчання, отримані моделі стали використовуватися в практичних цілях: в задачах прогнозування, для розпізнавання образів, в задачах керування та інші.

ШНМ представляють собою систему з'єднаних і взаємодіючих між собою простих штучних нейронів. Кожен нейрон схожої мережі має справу тільки з сигналами, які він періодично отримує, і сигналами, які він періодично посилає іншим нейронам. І тим не менш, будучи з'єднаними в досить велику мережу з керованою взаємодією, такі локально прості нейрони разом здатні виконувати достатньо складні завдання. Приклад нейронної мережі показано на рисунку 1.6.

Рис. 1.6 Проста нейронна мережа

З точки зору машинного навчання, нейронна мережа являє собою окремий випадок методів розпізнавання образів, дискримінантного аналізу, методів кластеризації тощо. З математичної точки зору, навчання нейронних мереж -- це задача нелінійної оптимізації. З точки зору кібернетики, нейронна мережа використовується в задачах адаптивного управління і як алгоритми для робототехніки. З точки зору розвитку обчислювальної техніки та програмування, нейронна мережа -- спосіб вирішення проблеми ефективного паралелізму . А з точки зору штучного інтелекту, ШНМ є основним напрямком в структурному підході з вивчення можливості побудови (моделювання) природного інтелекту за допомогою комп'ютерних алгоритмів. Нейронні мережі не програмуються в звичайному розумінні цього слова, вони навчаються. Можливість навчання -- одна з головних переваг нейронних мереж перед традиційними алгоритмами. Технічно навчання полягає в знаходженні коефіцієнтів зв'язків між нейронами. У процесі навчання нейронна мережа здатна виявляти складні залежності між вхідними даними і вихідними, а також виконувати узагальнення. Це означає, що у разі успішного навчання мережа зможе повернути вірний результат на підставі даних, які були відсутні в навчальній вибірці, а також неповних та «зашумленних», частково перекручених даних.

Налаштування нейронних мереж проводиться за допомогою трьох парадигм навчання:

1. Навчання «з учителем». При цьому підході вважається, що для кожного прикладу xn з навчальної вибірки {xn} заздалегідь відомий бажаний результат t ? {tn} роботи нейронної мережі. Це дозволяє ефективно коригувати ваги мережі. Очевидним недоліком такого підходу є те, що не завжди є достатньо кількість прикладів «з відповідями», а часом їх і зовсім неможливе можна отримати. У цьому випадку використовується другий варіант навчання.

2. Навчання «без вчителя». Цей тип навчання передбачає, що бажані виходи мережі не визначені, і алгоритм навчання нейронної мережі підлаштовує ваги на свій розсуд. Фактично при цьому нейронна мережа шукає закономірності в навчальних даних і виконує групування схожих вхідних векторів у неявним ознаками. Найчастіше цей метод використовується для задач класифікації. Прикладом такого типу навчання служить алгоритм навчання Кохонена.

3. Навчання методом критики. Даний підхід є фактично посередником між першими двома. Передбачається, що є можливість тільки оцінювати правильність роботи мережі і вказувати бажаний напрям навчання. Подібна ситуація часто зустрічається в системах, пов'язаних з оптимальним управлінням. Даний підхід, наприклад, використовується при стратегії що запропонував Г. Барто в 1985 р. Подібна нейронна мережа складається з так названих егоїстичних нейронів. Процедура навчання таких нейронів заохочує кожен окремий нейрон до збільшення тільки власної «нагороди», а не продуктивності всієї мережі, як реалізовано в методі зворотного поширення помилки [7].

1.2.3. Нейронні мережі Кохонена

Нейронні мережі Кохонена призначені для вирішення завдань автоматичної класифікації, коли навчальна послідовність образів відсутня. Відповідно відсутня і фіксація помилки, на мінімізації якій засновані алгоритми навчання.

Мережа Кохонена - це двошарова нейронна мережа, що містить вхідний шар (шар вхідних нейронів) і шар Кохонена (шар активних нейронів). Шар Кохонена може бути: одномірним, двовимірним або тривимірним. У першому випадку активні нейрони розташовані в ланцюжок (рис. 1.7), у другому випадку вони утворюють двовимірну сітку (зазвичай у формі квадрата або прямокутника), а в третьому випадку вони утворюють тривимірну конструкцію [8].

В силу відсутності навчальної послідовності образів, для кожного з яких відома від вчителя приналежність до того чи іншого класу, визначення ваг нейронів шару Кохонена засноване на використанні алгоритмів класичної класифікації (кластеризації або самонавчання). Мережа Кохонена функціонує в дусі стратегії, згідно з якою переможець забирає все, тобто тільки один нейрон збуджується, інші виходи шару придушуються, виходи zj мережі при цьому

Рис.1.7. Одномірна мережа Кохонена.

Мережа Кохонена здійснює класифікацію вхідних векторів в групи схожих, підлаштовуючи ваги таким чином, що вхідні образи, які належать одному класу, будуть активізувати один і той же вихідний нейрон zj.

Для роботи алгоритму навчання мережі Кохонена важливо, щоб всі вхідні вектори {xn} були нормалізовані, тобто представляли собою одиничний вектор у просторі

Зазвичай перед початком роботи навчального алгоритму нейронної мережі ваги wij ініціюються випадковими величинами. У випадку мережі Кохонена виходять вектори ваг вихідних нейронів, рівномірно розподілені по поверхні гіперсфери. Але, як правило, вхідні вектори xi розподілені нерівномірно і групуються купками на невеликій частині поверхні сфери. Вектори ваг більшості нейронів дуже віддалені від вхідних векторів і ніколи не дадуть кращої відповідності, тобто не будуть брати участь в алгоритмі. Вектори ваг що залишилися та потрапили в групи вхідних векторів, буде недостатньо для правильного розділення xi на класи. Очевидним рішенням є ініціювання ваг, при приміщенні більшої їх частини в скупчення вхідних векторів. Таку можливість дає метод опуклої комбінації.

Всі ваги нейронної мережі робляться рівними wij = 1 / , де N - розмірність вхідного вектора. Вхідні вектори модифікуються по правилу xij = бxi + (1- б) / . Початкове значення коефіцієнта б > 0, тому всі вхідні вектори зосереджені в одній області з вагами wij і мають вигляд xi ? N. Потім, у процесі навчання б збільшується до 1, що повертає вхідних векторів їх істинні значення та тренує мережу Кохонена на них. Метод трохи сповільнює звичайну процедуру навчання, але дає кращі результати [9].

Після ініціалізації ваг, на вхід нейронної мережі подається вектор xi та обчислюється його скалярний добуток з вектором кожного нейрона на

Wj=(W1j,W2j, …..,Wdj): wx = |x||w||cos(x^w)|

Вибирається вектор ваг, що дає максимальне скалярний добуток. Нагадаємо, що cos (0°) = 1, звідси максимальне значення скалярного добутку буде давати найбільш схожий з вхідним вектором вектор ваг.

Інший варіант вищеперечисленої дії можна реалізувати наступним чином: визначається відстань між векторами Wj та Х в просторі і вибирається вектор ваг, відстань до якого найменша

Dj = 2

Далі проводиться акредитація - налаштування ваг тільки для вибраного на попередньому кроці нейрона за правилом wt+1 = wt + з(x - wt), де wt+1 - нове значення вагових коефіцієнтів [10].

Підстроювання ваг подібним чином зводиться до мінімізації різниці між вхідним вектором і векторами ваг обраного нейрона. Існує проста геометрична інтерпретація для двовимірного випадку (рис. 1.8). Знаходиться вектор (x - wt) і зменшується на величину з, задану швидкість навчання з ? 0,7.

Рис.1.8 Налаштування ваг нейрона

Таким чином, навчання зводиться до обертання вектора ваг нейрона в напрямку вхідного вектора без істотної зміни його довжини.

Потім повторюються кроки два попередні кроки до тих пір, поки вихідні значення мережі не стабілізуються з заданою точністю.

На основі мережі Кохонена будуються більш складні структури, так звані самоорганізаційні карти - SOM (self organized map). SOM будується з декількох шарів, побудованих за принципом мережі Кохонена. Найчастіше SOM шикуються в гратчасту структуру. Вибір нейрона «переможця» здійснюється так само як і в одномірній мережі Кохонена. Проте відбувається корекція вагового вектора не тільки «нейрона-переможця», а й вагових векторів інших активних нейронів шару Кохонена, проте у суттєво меншій мірі - залежно від віддалення від «нейрона-переможця».

При цьому форма і величина околиці навколо «нейрона-переможця», вагові коефіцієнти нейронів якої також коригуються, в процесі навчання змінюються. Спочатку починають з дуже великою області - вона, зокрема, може включати всі нейрони шару Кохонена [11]. Зміна вагових коефіцієнтів відбувається за правилом:

Wj(t+1) = Wj(t) + з(t) dcj(t) [x(t) - Wj(t)], j=1..m

де dcj(t) - функція близькості між нейронами шару Кохонена (neighborhood Kernel). Результатом роботи буде не один вихідний нейрон, а група нейронів, що відповідає кожному класу.

Це дозволяє здійснювати більш точну класифікацію вхідних образів. Наведемо приклади функцій близькості (двовимірного шару Кохонена). Відстань між нейронами i та j в двовимірному просторі

z = ??(ki1-kj1)2 + (ki2-kj2)2

де ki1 і ki2 - координати по вісі x та осі y нейрона i; kj1 та kj2 - аналогічно для нейрона j.

При цьому можна використовувати наступні функції близькості

Як зазначено вище, зміна вагових векторів Wj здійснюється в напрямку вхідного вектора X багаторазово. У процесі самонавчання варіюється як коефіцієнт корекції h, так і радіус d, що задає околиця навколо «нейрона-переможця».

2. Теоретичні та практичні результати

2.1. Застосування бібліотеки Winpcap для захоплення мережевого трафіку

Поставлена задача: написання програми що буде захоплювати пакети з заданого мережевого інтерфейсу та вилучати перші 8 байт ip заголовку.

Короткі відомості про програму:

мова написання: C/C++

операційна система: Windows 7

мережева карта: Atheros AR5007 802.11b/g WiFi

Програма розроблялась у середовищі Visual Studio 2008 на операційній системі Windows 7. Використовувалися мультиплатформенні функції бібліотеки pcap. Нижче приводиться їхній опис.

int pcap_findalldevs (pcap_if_t **alldevsp, char *errbuf) - конструює список мережевих пристроїв які можуть бути застосовані з допомогою pcap_open_live

char *errbuf - вказівник на буфер помилок;

struct pcap_if_t - структура з допомогою якої вищезазначена функція надає список мережевих пристроїв. Вона має наступні поля:

*next - вказівник на наступний елемент в списку, Null - для останнього елементу в списку;

char *name - вказівник на елемент, що містить ім'я пристрою;

char *description - вказівник на елемент, що містить опис пристрою;

struct pcap_addr *addresses - вказівник на перший елемент списку адрес пристрою;

u_int flags - PCAP_IF_ прапори інтерфейсу. Зараз можливий тільки прапор PCAP_IF_LOOPBACK, що визначає чи є інтерфейс типу loopback.

pcap_t* pcap_open_live (const char *device, int snaplen, int promisc, int to_ms, char *ebuf) - відкриває пристрій для можливості захвату пакетів. Повертає дескриптор на інтерфейс для захоплення трафіку.

const char *device - вказівник на пристрій;

int snaplen - максимально байтів що можуть бути захопленими;

promisc - інформує чи інтерфейс в promiscuous стані (безрозбілвий стан при якому мережевий пристрій захоплює всі пакети що надходять до нього з мережі);

to_ms - таймаут у мілісекундах (тобто час протягом якого не повертається зчитаний пакет, а очікуються ще на інші нпакети);

char *ebuf - використовується для повідомлення про помилку та попереджень.

void pcap_freealldevs (pcap_if_t *alldevsp) - очищення списку мережевих пристроїв поверненних pcap_findalldevs().

int pcap_next_ex (pcap_t *p, struct pcap_pkthdr **pkt_header, const u_char **pkt_data) - читання пакету з інтерфейсу. Дана функція використовується для отримання наступного доступного пакету.

struct pcap_pkthdr **pkt_header - вказівник на заголовок пакету в дамп-файлі (для кожного пакета додається в дампі сгенерований заголовок, для виявлення необхідніх пакетів з певного інтерфейсу);

const u_char **pkt_data - вказівник на вміст пакету.

Для отримання ip заголовку додаємо 14 (саме стільки байт займає заголовок Ethernet без врахування преамбули) до вказівника на дані пакету (pkt_data) [11]. Власне вказівник надається модулю нейронної мережі для аналі.

2.2. Реалізація нейронної мережі Кохонена для аналізу заголовків

Як вже зазначалося для аналізу мережевого трафіку використовується нейронна мережа Кохонена. Далі слідує опис алгоритму нейромережі Кохонена.

Загальна схема роботи нейронної мережі Кохонена представлена на рисунку 2.1.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рис. 2.1 Схема роботи нейронної мережі

При початку роботи програми генерується випадковим чином вагові коефіцієнти Wij кожного нейрона, а точніше вибирається випадковий пакет (напр. перший пакет) і кожному масиву вагових коефіцієнтів який відповідає i - ому вхідному нейрону задається випадкове значення в діапазоні від 0 до 0.5 якщо значення і - ого біту обраного пакету дорівнює 0, та від 0.5 до 1 у випадку якщо і - ий біт обраного пакету дорівнює 1.

Далі слідує цикл, кількість ітерацій якого - кількість отриманих пакетів з мережі. В даному випадку обробляється порядку 106 пакетів.

Коефіцієнт швидкості навчання вибрався рівним з(t) = 0.03. Основною метою кожної ітерації є обчислення вихідних векторів для кожного вхідного вектора з пошуком нейрона «переможця» та відповідним коригуванням всіх вагових коефіцієнтів в залежності від віддалі до нейрона «переможця» за формулою:

Wj(t+1) = Wj(t) + з(t) d(r) [x(t) - Wj(t)]

Функція близькості d(r) обиралася в двох варіантах (r - Евклідова відстань між нейронами, для сусідніх вона дорівнює одиниці):

d(r) = exp(-r2)

d(r) = exp(-r)

d(r) = 1/(1 + r)

Окрім коригування ваг ведеться ще рахунок виграшів кожного з нейронів. Слід зазначити, що вхідний вектор не нормується, власне цей факт є причиною того що після завершення функціонування нейромережі значення вагових коефіцієнтів знаходяться в діапазоні від 0 до 1.

2.3. Інтерпретація та аналіз отриманих даних

Функціонування нейромережі припиняється після опрацювання порядку 106 пакетів. Після цього вибирається два вихідні нейрони які мають найбільшу кількість виграшів. Відповідно вагові коефіцієнти що пов'язані з ними будуть досліджені для кожного варіанту функції близькості.

Cтруктуру IP пакету зображена на рисунку 2.2.

Рис. 2.2 Структура IP пакету

Version (версія) - 4 біти використовуються для відображення версії протоколу IP. Поточна версія - четверта.

Header Length (довжина заголовка) - 4 біти використовуються для відображення кількості 32-бітових слів в заголовку IP-пакету. Мінімальний розмір заголовка - 20 байт, отже, довжина мінімального заголовка - 0x5. Опції IP можуть збільшити мінімальний розмір заголовка на 4 байти. Якщо опція не використовує їх все, то біти, що залишилися, заповнюються нулями, тому довжина заголовка завжди кратна 4 байтам.

Type of Service (тип обслуговування) - 8 біт використовуються для позначення якості обслуговування, що вимагається для цієї датаграми, при доставці через маршрутизатори об'єднаної IP-мережі. У них є біти, виділені для пріоритету, затримки, пропускної спроможності і характеристик надійності.

Total Length (загальна довжина) - 16 біт використовуються для відображення загальної довжини датаграмми протоколу IP (заголовок IP-пакету + його зміст). Сюди не включений заголовок мережевого кадру.

Identification (ідентифікація) - 16 біт використовуються як ідентифікатор даного IP-пакету. Якщо IP-пакет фрагментований, то всі фрагменти мають однакові ідентифікатори, використовувані при збірці вузлом-одержувачем.

Fragmentation Flags (прапори фрагментацій) - 3 біти зарезервовані для прапорів фрагментації; проте тільки 2 біти визначені для поточного використовування. Один прапор служить для позначення фрагментованого пакету, інший - для ідентифікації останнього фрагмента.

Fragment Offset (зсув фрагмента) - 13 біт використовуються як лічильник зсуву для вказівки положення фрагментів щодо початку поля даних IP-пакету. Якщо фрагментації немає, то зсув рівний 0x0.

Time to Live(час існування) - 8 біт використовуються як індикатор часу (транзиту IP-пакету), максимально допустимого перед тим, як пакет буде знехтуваний. Поле TTL використовується як лічильник часу (у секундах), проведеного пакетом на маршрутизаторі, який відповідно зменшує TTL. Сучасні маршрутизатори майже завжди перенаправляють датаграмми менш ніж за 1 з, проте, по вимогах RFC 791, вони повинні зменшувати TTL не менше ніж на одиницю. Тому TTL стає лічильником максимального числа транзиту.

Protocol (протокол) - 8 біт використовуються як ідентифікатор протоколу, дані якого інкапсульовані в IP-пакет. Поле протоколу застосовується для передачі пакету протоколу вищого рівня.

Header checksum (контрольна сума заголовка) - 16 біт використовуються як контрольна сума заголовка IP-пакету. Дані пакету не враховуються і можуть мати свою власну контрольну суму для перевірки помилок. Коли вузол одержує IP-пакет, він проводить перевірку контрольної суми і при неспівпаданні значень відкидає пакет. Коли маршрутизатор пересилає IP-пакет, він, як мінімум, зменшує TTL. Тому контрольна сума обчислюється знову при кожному транзиті на шляху від відправника до одержувача.

Source Address (адреса відправника) - 32 біти використовуються для зберігання IP-адреси вузла-відправника.

Destination Address (адреса одержувача) - 32 біти використовуються для зберігання IP-адреси вузла-одержувача.

Options and Padding (опції і заповнення) - для зберігання опцій використовується кратні 32 числа біт. Якщо ж опції не займають цей біт цілком, залишок заповнюється нулями. Таким чином, довжина IP-заголовка завжди може бути виражена кількістю четвірок байт і записана в полі Header Length.

Зобразимо кластеризацію отриманих даних, тобто проілюструємо гістограму вагових коефіцієнтів що відповідають двом нейронам з найбільшим числом виграшів для кожного варіанту функції близкості (рис. 2.3 - 2.8).

Рис. 2.3. Гістограма вагових коефіцієнтів 1-го по кількості виграшів вихідного нейрона для функції близькості d(r) = 1/(1 + r)

Рис. 2.4. Гістограма вагових коефіцієнтів 2-го по кількості виграшів вихідного нейрона для функції близькості d(r) = 1/(1 + r)

Рис. 2.5. Гістограма вагових коефіцієнтів 1-го по кількості виграшів вихідного нейрона для функції близькості d(r) = exp(-r)

Рис. 2.6 Гістограма вагових коефіцієнтів 2-го по кількості виграшів вихідного нейрона для функції близькості d(r) = exp(-r)

Рис. 2.7 Гістограма вагових коефіцієнтів 1-го по кількості виграшів вихідного нейрона для функції близькості d(r) = exp(-r2)

Рис. 2.8 Гістограма вагових коефіцієнтів 1-го по кількості виграшів вихідного нейрона для функції близькості d(r) = exp(-r2)

На наведених гістограмах червоним коліром позначені не значущі вагові коефіцієнти значення яких знаходиться в діапазоні від 0.15 до 0.85, голубим - від 0 до 0.15 та від 0.85 до 1. Синім коліром позначено вагові коефіцієнти які другими підряд лежали в межах від від 0 до 0.15 та від 0.85 до 1.

Проаналізуємо отримані кластеризовані дані. Для 1-го по кількості виграшів вихідного нейрона значущими полями були в основному 2 - 21 біти. В даних бітах міститься наступна інформація: версія, довжина заголовка,тип обслуговування та перші байти загальної довжини IP пакету. Це пояснюється тим, що версія для всіх IP пакетів однакова, довжина заголовка в основному становить 20 байт, тип сервісу - рідко зазнає змін. Оскільки більшість пакетів не досягають максимального значення - перші біти поля загальної довжини пакета становлять однакове значення та дорівнюють нулю. Наступна ділянка яка заслуговує уваги - це 46 - 56 біти. Сюди входять такі поля як поле ідентифікації, прапори фрагментацій та перші біти зсуву фрагмента. Поле ідентифікації використовується як ідентифікатор даного пакету, тобто якщо пакет фрагментований то всі фрагменти мають однакові ідентифікатори, що використовуються при збірці вузлом - одержувачем. Власне по цих причинах біти даного поля не являються достатньо значущими. 49 - 52 біти слугують прапорами фрагментації з яких один зарезервований, а два інших - для позначення фрагментованого пакету, та для ідентифікації останнього фрагмента. Звідси слідує що для у більшості пакетів 49 - 52 однакові і як результат - значущі біти. Наступні 52 - 56 біти - перші біти зсуву фрагмента. Оскільки зсув рідко набуває максимальних значень, то в загальному випадку дані біти дорівнюють 0, отже вони також є значущими. Біти 72 - 82 включать в себе поле протоколу та перші біти контрольної суми заголовка. Очевидно, що оскільки поле протоколу дані якого інкапсульовані в IP пакет то вони однакові для більшості пакетів, отже є значущими. Перші біти контрольної суми заголовків рідко бувають рівними 1 адже контрольна сума майже ніколи не набуває максимального значення тому вони також значущі.

d(r) = 1/(1 + r) d(r) = exp(-r) d(r) = exp(-r2)

Рис. 2.9 Порівняння найбільш значимих вагових коефіцієнтів 1-го по кількості виграшів вихідного нейрона їхні значення при різних функціях близькості

Всі наступні біти які робилися значущими в наведених кластеризаціях ставали такими із-за однорідності наборів пакетів, а власне по причині схожості в багатьох пакетах адреса призначення та адреса джерела.

Порівняємо найбільш значимих вагових коефіцієнтів 1-го по кількості виграшів вихідного нейрона їхні значення при різних функціях близкості (рис. 2.8). Як видно з рисунку різні функції близькості дають ідентичний результат, тобто функція близькості при даних параметрах не змінює результату кластеризації.

Цікаві результати отримаємо від співставлення вагових коефіцієнтів першого та другого нейрона по кількості виграшів.

Рис.2.10 Співставлення вагових коефіцієнтів першого та другого нейрона по кількості виграшів

З наведених даних можемо стверджувати, що перші біти 7 - 21 (тип сервісу обслуговування та перші біти довжини пакету) та 51 - 56 біти (прапори фрагментації) більш значимі ніж 4 - 5 (версія та перші біти довжини заголовку), 76 - 81 (протокол інкапсульованого пакету). Це очевидно, адже протокол інкапсульованого пакету верхнього (UDP та TCP) та перші біти довжини заголовку змінюються частіше ніж довжина пакету, тип якості сервісу та прапори фрагментації.

Дослідимо швидкість навчання нейромережі. Для цього порівняємо динаміку різниці вхідних векторів та вектора переможця для нейромереж з різними функціями близькості. Усереднені дані показані на рисунку 2.11.

Рис. 2.11. Динаміка різниці вхідних векторів та вектора переможця

Як видно з рисунку найкращий результат швидкості навчання у функції d(r) = exp(-r). Щодо двох інших , то d(r) = exp(-r2) дає трохи кращий результат ніж d(r) = 1/(1 + r). Проте не слід також забувати про те що операція експоненти потребує в десятки більше тактів процесора, а отже використовує більше процесорного часу (це зумовлено тим що ЕОМ обчислює експоненту з допомогою ряда Телора обрахунок якого містить сотні операцій ділення)

Висновки

Під час виконання дипломної роботи було опрацьовано літературу щодо нейронної мережі Кохонена та описано організаційну структуру аналізатора мережевого трафіку.

Досліджено основні принципи функціонування мультиплатформенної бібліотеки для захоплення мережевого трафіку Pcap та власне її реалізацію під платформу Windows - WinPcap. З використанням даної бібліотеки реалізовано модуль для захоплення «сирого» мережевого трафіку та відокремлення заголовку Ethernet пакету.

Згідно розробленого алгоритму нейронної мережі Кохонена створено мережевий аналізатор, що здатен захоплювати мережевий трафік та відокремлювати 20 байт IP заголовку з подальшим виконанням задачі кластеризації за допомогою нейронної мережі Кохонена.

Отримані результати кластеризації пояснено з точки зору структури вхідних пакетів, що надходять до програмного застосування з мережі. Також порівняно швидкості навчання нейромережі з різними функціями близькості.

Додаток

#include <pcap.h>

#include <iostream>

#include <WinSock.h>

#include <WinSock2.h>

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <fstream>

using namespace std;

/* 4 bytes IP address */

typedef struct ip_address{

u_char byte1;

u_char byte2;

u_char byte3;

u_char byte4;

}ip_address;

/* IPv4 header */

typedef struct ip_header{

u_char ver_ihl; // Version (4 bits) + Internet header length (4 bits)

u_char tos; // Type of service

u_short tlen; // Total length

u_short identification; // Identification

u_short flags_fo; // Flags (3 bits) + Fragment offset (13 bits)

u_char ttl; // Time to live

u_char proto; // Protocol

u_short crc; // Header checksum

ip_address saddr; // Source address

ip_address daddr; // Destination address

u_int op_pad; // Option + Padding

}ip_header;

/* UDP header*/

typedef struct udp_header{

u_short sport; // Source port

u_short dport; // Destination port

u_short len; // Datagram length

u_short crc; // Checksum

}udp_header;

const int N(160); //number of input neirons

const int M(160); //number of output neirons

const int K(1000); //need number of calculating packets for write to file w

float w[N][M]; // weighting coefficients

int win[M]; // number of winings for each out neirons

float eta = 0.001;

int k(0);

void chartobool(const u_char *pkt_data, float x[N])

{

for (int n = 0; n < N/8; n++)

for (int j = 0; j < 8; j++)

{

if (*(pkt_data + 14 + n) & (1 << j))

{

x[ (n * 8) + (7 - j)] = 1;

//s += 1;

}

else x[(n * 8) + (7 - j)] = 0;

}

}

void init(const u_char *pkt_data)

{

float x[N];

chartobool(pkt_data, x);

srand(time(NULL));

for (int n = 0; n < N; n++)

{

win[n] = 0;

for (int m = 0; m < M; m++)

{

w[n][m] = ( ((float)x[n]/2) + ( ((float)(rand()%500)) / 1000));

}

}

}

void calculate(const u_char *pkt_data)

{

float x[N];

chartobool(pkt_data, x);

//finding max

float max = 0;

int max_index = 0;

for (int m = 0; m < M; m++)

{

float temp = 0;

for (int n = 0; n < N; n++)

temp += x[n] * w[n][m];

if (temp > max)

{

max = temp;

max_index = m;

}

}

win[max_index]++;

for (int m = 0; m < M; m++)

for (int n = 0; n < N; n++)

w[n][m] += eta * (x[n] - w[n][m]) / (1 + abs(max_index - m));

//

//w[n][m] += eta * exp( - (float)abs(max_index - m)) * (x[n] - w[n][m]);

//w[n][m] += eta * eta * exp(-abs(w[n][max_index] - w[n][m])) * (x[n] - w[n][m]);

}

int compare (const void * a, const void * b)

{

return ( *(int*)b - *(int*)a );

}

void output(int numb_max)

{

int win1[2][M];

for (int m = 0; m < M; m++)

{

win1[0][m] = win[m];

win1[1][m] = m;

}

qsort(win1,M,sizeof(int*),compare); //sort: first - max, last - min

ofstream out("out.txt");

for (int numb = 0; numb < numb_max; numb++)

{

for (int i = 0; i < N; i++)

{

out << w[i][win1[1][numb]] << endl;

}

out << endl;

}

out.close();

}

/* prototype of the packet handler */

void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);

int main()

{

pcap_if_t *alldevs;

pcap_if_t *d;

int inum;

int i=0;

pcap_t *adhandle;

char errbuf[PCAP_ERRBUF_SIZE];

/* Retrieve the device list */

if (pcap_findalldevs(&alldevs, errbuf) == -1)

{

fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);

exit(1);

}

/* Print the list */

for(d=alldevs; d; d=d->next)

{

printf("%d. %s", ++i, d->name);


Подобные документы

  • Специфіка застосування нейронних мереж. Огляд програмних засобів, що використовують нейронні мережі. Побудова загальної моделі згорткової нейронної мережі. Реалізація нейромережного модулю розпізнавання символів на прикладі номерних знаків автомобілів.

    дипломная работа [3,4 M], добавлен 15.03.2022

  • Топології нейронної мережі та їх застосування, варіанти вибору архітектури мереж, число проміжних шарів і число елементів, архітектури мереж користувачів. Мережі для задач з багатьма класами, операція додавання матриці втрат, багатошаровий перцептрон.

    контрольная работа [227,3 K], добавлен 21.06.2011

  • Розрахунок і планування середнього трафіку та коефіцієнта використання мережі. Прокладка кабеля, установка активного мережевого обладнання. Визначення переліку використовуваного програмного забезпечення та апаратної платформи. Вибір програмних засобів.

    курсовая работа [333,4 K], добавлен 10.12.2014

  • З’єднання компонентів мережі офісу на фізичному та канальному рівні, створення топології мережі, налаштування адресації та маршрутизації. Моделювання потоків трафіку і обміну пакетами між роутерами мережі, розрахунок подвоєної затримки поширення сигналу.

    курсовая работа [402,1 K], добавлен 23.12.2015

  • Стратегія побудови та забезпечення безпеки мережі Wi-Fi, характеристика стандартних методів її захисту. Сценарії проектування та розгортання мережі, радіообстеження зони її покриття, налаштування, підключення точок доступу та реалізація захисту.

    дипломная работа [2,2 M], добавлен 02.11.2013

  • Навчання штучних нейронних мереж, особливості їх використання для вирішення практичних завдань. Рецепторна структура сприйняття інформації. Перцептрон як модель розпізнавання. Задача моделювання штучної нейронної мережі з розпаралелюванням процесів.

    дипломная работа [2,8 M], добавлен 24.07.2013

  • МАС-адреса як унікальний ідентифікатор мережевого інтерфейсу (зазвичай мережевої карти) для реалізації комунікації пристроїв в мережі на фізичному рівні. IP-адреса: поняття та призначення, принципи та етапи настройки. Основи роботи з утилітами TCP/IP.

    лабораторная работа [161,6 K], добавлен 15.10.2013

  • Реалізація сегментації позичальників методом карт Кохонена за допомогою пакету Deductor Studio. Послідовність дій, які необхідно провести для аналізу даних у Deductor Studio. Результат сегментації на картах Кохонена та характеристика кожного сегменту.

    контрольная работа [1017,1 K], добавлен 29.09.2010

  • Характеристика особливостей побудови біологічних та штучних нейронних мереж. Вивчення їх активіаційних функцій: порогової бінарної, лінійної обмеженої, гіперболічного тангенса. Персептрони і зародження штучних нейромереж. Багатошарові нейронні мережі.

    реферат [1,2 M], добавлен 11.06.2010

  • Оцінка ролі кожного окремого комп'ютера в загальній мережі. Стандартні правила роботи мережевого устаткування різних виробників. Рівні і пристрої доступу і розподілу. Структура та принцип дії локальної мережі. Стандарти бездротових локальних мереж.

    дипломная работа [3,1 M], добавлен 09.04.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.