Предмет:
Тип роботи:
Бакалаврська робота
К-сть сторінок:
57
Мова:
Українська
кількість програмних та апаратних платформ;
‒можливість кроссплатформенного написання більшості необхідних функції;
‒мова C не є об'єктно орієнтованою. Оскільки програму розробляє лише одна людина, достатньо використовувати функціональний підхід;
‒мова C є однією з найшвидших при виконанні;
‒мова є досить популярною, під неї написано велику кількість готових бібліотек та прикладів реалізації.
У якості середовища розробки було обрано текстовий редактор GNU Emacs. Основними перевагами цього редактора є використання комбінацій клавіш для всіх можливих операцій, глибока інтеграція з іншими основними та допоміжними засобами розробки, що встановлені в системі, такими як компілятор, налагоджувач та документація з бібліотек, можлиівсть легкого встановлення необхідних розширень для підвищення ефективності роботи та гнучкість у налаштуванні під понкретні задачі.
У якості компілятора було обрано gcc, оскільки він є найбільш розповсюдженим компілятором мови C в UNIX та зазвичай встановлен за замовчуванням. GCC у різних варіаціях доступен під різні програмні платформи, наприклад, існують готові для встановлення пакети під Windows у рамках проекта MinGW. UNIX-підсистема для Windows Cygwin так само містить свою версію gcc.
Для тестування компіляції та подальшої розробки версії програмного додатку під Windows було використано середовище розробки Microsoft Visual Studio 2008. Microsoft Visual Studio підтримує проекти C, має можливість підклчення стороннії бібліотек, швидкий доступ до документації MSDN та є найрозповсюдженішим середовищем розробки для Windows, зручним для більшості програмістів. Було обрано стару версію 2008, оскільки в ній відсутні деяки обов'язкові перевірки та примусове використання некроссплатформенних засобів за замовчуванням. Проекти Visual Studio можуть бути використані та зкомпільовані у нових версіях середовища після виконання ряду налаштувань.
Для реалізації функцій захвату та аналізу пакетів мережевого трафіку було використано бібліотеку Pcap, що дозволяє створювати програми аналізу мережевих даних, що надходять на мережеву карту комп'ютера. Різноманітні програми моніторингу та тестування мережі, сніффери використовують цю бібліотеку. Вона призначена для використання спільно з мовами C та C ++, а для роботи з бібліотекою на інших мовах, таких як Java або. NET, використовують обгортки. Для Unix-подібних систем це бібліотека libpcap, а для Microsoft Windows – WinPcap. Програмне забезпечення мережевого моніторингу може використовувати libpcap або WinPcap, щоб захопити пакети, які подорожують по мережі, і для передачі пакетів в мережі. Libpcap і WinPcap також підтримують збереження захоплених пакетів в файл і читання файлів, що містять збережені пакети. Програми, написані на основі libpcap або WinPcap, можуть захопити мережевий трафік, аналізувати його. Файл захопленого трафіку зберігається в форматі, зрозумілому для додатків, що використовують Pcap.
3.2. Проектування та розробка програмного засобу
Основним завданням розробки є збір та аналіз інформації про мережевий трафік за доромогою бібліотеки lipcap та моніторинг завантаження системи за допомогою стандартних засобів ОС.
В загальному схему роботи програмни зображена на рисунку 3. 1. В першу чергу вдібувається створення та початкове заповенення глобальних змінних програми, які будуть використовуватись іншими функціями, отримується активний мережевий інтерфейс, пакети циклічно передаються в функцію my_callback () для подальшої обробки.
Рисунок 3. 1 – Загальна схема роботи програми
Для ініціалізації можливості роботи моніторингу центрального процесору необхідно оголосити змінні максимально можливої довжини, які будуть використані для вирахування процентного відношення завантаження.
На початку роботи фіксується поточний час і записується у змінні timeStart та timePrevious.
static unsigned long long lastTotalUser, lastTotalUserLow, lastTotalSys, lastTotalIdle;
Для збереження інформації про кількість пакетів певного типу оголошено відповідні змінні, їх початкове значення – 0.
static int ipv4=0;
static int arp=0;
static int tcp=0;
static int udp=0;
Для збереження інформації про початкову кількість переданих та прийнятих байтів даних (до початку роботи програми) та збереження поточної кількості також створено відповідні змінні startrx, starttx, currx та curtx. Час захоплення трафіку та моніторингу (час роботи програми) приймається у вігляді першого аргументу командного рядку та зберігається у змінну usertimeout цілого типу.
За допомогою засобів lipcap можна легко визначити активний мережевий інтерфейс:
dev = pcap_lookupdev (errbuf) ;
if (dev == NULL) {
fprintf (stderr, «% s\n», errbuf) ;
exit (1) ;
}
та розпочати захват пакетів, передавши керування у функцію оброки my_callback () :
pcap_lookupnet (dev, &netp, &maskp, errbuf) ;
descr = pcap_open_live (dev, BUFSIZ, 1, -1, errbuf) ;
if (descr == NULL) {
printf («pcap_open_live () : % s\n», errbuf) ;
exit (1) ;
}
pcap_loop (descr, -1, my_callback, NULL) ;
Функція my_callback () є функцією додатку у якій безпосередньо здійснюється обробка захоплених пакетів, моніторинг навантаження на центральний процесор та оперативну пам'ять, фіксується час та перевіряється умова завершення роботи програми (час, заданий користувачем у вигляді першого аргументу командного рядку). Загальна схема роботи функції зображена на рисунку 3. 2.
На початку роботи функція фіксує поточний системний час та під час кожної ітерації перевіряє, відповідно до віхдного параметру, чи повинно завершити роботу програми.
Для пакету кожного типу (IPv4, IPv6, ARP та інших) виконується перевірка з записом кількості пакетів у відповідні змінні. Додатково IPv4 пакети передаються на обробку у функцію handle_ip