Бібліотека Pcap та її реалізація WinPcap під платформу Windows. Аспекти робот з бібліотекою WinPcap. Штучні нейронні мережі. Застосування бібліотеки Winpcap для захоплення мережевого трафіку. Реалізація нейронної мережі Кохонена для аналізу заголовків.
При низкой оригинальности работы "Реалізація аналізатора мережевого трафіку на основі нейронної мережі Кохонена", Вы можете повысить уникальность этой работы до 80-100%
В сучасних умовах з розвитком компютерних мереж та тісну інтеграцію цих новітніх систем у повсякденне життя виникає необхідність контролю та аналізу мережевого трафіку. Внаслідок збільшення пропускної здатності компютерних мереж, кількість пакетів для аналізу ,що проходить за одиницю часу через мережу стає надто великою для обробки цих пакетів стандартними засобами.Зараз можливий тільки прапор PCAP_IF_LOOPBACK, що визначає чи є інтерфейс типу loopback. pcap_t* pcap_open_live (const char *device, int snaplen, int promisc, int to_ms, char *ebuf) - відкриває пристрій для можливості захвату пакетів. 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 - вказівник на заголовок пакету в дамп-файлі (для кожного пакета додається в дампі сгенерований заголовок, для виявлення необхідніх пакетів з певного інтерфейсу); Для отримання ip заголовку додаємо 14 (саме стільки байт займає заголовок Ethernet без врахування преамбули) до вказівника на дані пакету (pkt_data) [11]. При початку роботи програми генерується випадковим чином вагові коефіцієнти Wij кожного нейрона, а точніше вибирається випадковий пакет (напр. перший пакет) і кожному масиву вагових коефіцієнтів який відповідає i - ому вхідному нейрону задається випадкове значення в діапазоні від 0 до 0.5 якщо значення і - ого біту обраного пакету дорівнює 0, та від 0.5 до 1 у випадку якщо і - ий біт обраного пакету дорівнює 1.Під час виконання дипломної роботи було опрацьовано літературу щодо нейронної мережі Кохонена та описано організаційну структуру аналізатора мережевого трафіку. Згідно розробленого алгоритму нейронної мережі Кохонена створено мережевий аналізатор, що здатен захоплювати мережевий трафік та відокремлювати 20 байт IP заголовку з подальшим виконанням задачі кластеризації за допомогою нейронної мережі Кохонена./* 4 bytes IP address */ typedef struct ip_address{ u_char byte1; /* 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 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.
Вывод
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.
Рис. 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 пакетів. Після цього вибирається два вихідні нейрони які мають найбільшу кількість виграшів. Відповідно вагові коефіцієнти що повязані з ними будуть досліджені для кожного варіанту функції близькості.
Структуру 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 заголовку з подальшим виконанням задачі кластеризації за допомогою нейронної мережі Кохонена.
Отримані результати кластеризації пояснено з точки зору структури вхідних пакетів, що надходять до програмного застосування з мережі. Також порівняно швидкості навчання нейромережі з різними функціями близькості.
Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность своей работы