Аналіз та обробка мережевого трафіку є критичними аспектами для підтримки та оптимізації ефективності локальних мереж. У цьому контексті інструменти, такі як Wireshark і tcpdump, стають незамінними помічниками для інженерів мереж та адміністраторів. Вони надають змогу перехоплювати, аналізувати і розуміти потік даних у мережі, допомагаючи вирішувати реальні проблеми та забезпечувати безпеку мережі.Wireshark, відомий своєю потужною та інтуїтивно зрозумілою інтерфейсною, надає користувачам можливість перехоплювати пакети даних, аналізувати їх заголовки і вміст, ідентифікувати потенційні загрози безпеці, та виявляти проблеми з швидкодією мережі. Водночас, tcpdump – це інструмент командного рядка, який дозволяє здійснювати більш глибокий аналіз пакетів.
У цій статті ми детально розглянемо, як Wireshark і tcpdump можуть бути використані для аналізу локальних мереж та обробки перехоплених мережевих пакетів. Ви дізнаєтеся про їх можливості, основні переваги та як вони спільно допомагають розкрити потенційні проблеми мережі та забезпечити її ефективну роботу. Аналіз мережевого трафіку є важливою складовою сфери ІТ-інфраструктури, і знання цих інструментів може виявитися надзвичайно корисним для інженерів, адміністраторів та всіх, хто відповідає за надійність та безпеку мережі. Розуміння та ефективне використання інструментів, таких як Wireshark і tcpdump, є ключовими аспектами забезпечення надійності та безпеки локальних мереж. На відміну від звичайних користувачів, які можуть взаємодіяти з мережею лише на поверхневому рівні, інженери мереж та адміністратори повинні мати засоби для глибокого аналізу мережевого трафіку. Ознайомившись із Wireshark, можна починати збирати та аналізувати пакети. У цьому розділі ви дізнаєтеся, як обробляти файли перехоплення, пакети та формати відображення часу. Також обговорюються додаткові можливості для сніффінга пакетів і способи використання фільтрів.
З часом ви виявите, що велика частка нюхання пакетів відбувається на стадії після захоплення. Як правило, в різні моменти часу робиться кілька перехоплень. При цьому вони зберігаються, а потім аналізуються. Таким чином, Wireshark дозволяє зберігати файли перехоплення для подальшого аналізу. Крім того, кілька файлів перехоплення можуть бути об’єднані разом.
Збереження та експорт файлів перехоплення
Щоб зберегти результат захоплення пакетів, виберіть у головному меню File4 Save As. У результаті з’явиться діалогове вікно Save flle as, показане на рис. 4.1, в якому буде запропоновано вказати місце збереження отриманого перехоплення пакетів, а також вибрати відповідний для нього формат файлу. Якщо ви не вкажете формат файлу, Wireshark автоматично вибере формат файлу за замовчуванням із розширенням .rsarpd.
Найчастіше потрібно зберегти лише частину захоплених пакетів. Для цього в головному меню виберіть «Зазначені пакети». В результаті з’явиться діалогове вікно, показане на рис. 4.2. Це зручна можливість зменшити розмір надмірно роздутих файлів перехоплення. Зокрема, ви можете вибрати збереження пакетів тільки в певному діапазоні чисел, позначених пакетами або тих пакетів, які з’являються на екрані після застосування фільтра дисплея (зазначені пакети і фільтри матричні далі в цьому розділі).
Деякі типи аналізу вимагають можливості об’єднання декількох файлів перехоплення разом. І це звичайна практика, коли доводиться порівнювати два потоки даних або об’єднувати потоки, пов’язані з одним і тим же мережевим трафіком, але перехопленими окремо.
Щоб об’єднати файли перехоплення, відкрийте один з них і виберіть File4Merge в головному меню. В результаті відкриється діалогове вікно Об’єднати з файлом захоплення, показано на рис. 4.3. Спочатку виберіть новий файл, з яким ви хочете об’єднати вже відкритий файл, а потім як їх об’єднати. Наприклад, вибраний файл можна додати на початку або в кінці відкритого файлу, або можна об’єднати файли в хронологічному порядку, виходячи з часових позначок їх створення або зміни.
Це в кінцевому підсумку дійде до того, що вам доведеться обробляти багато пакетів. Оскільки кількість посилок зростає до тисяч або навіть мільйонів, вам потрібно буде ефективно переміщатися по цих пакетах. І для цього Wireshark забезпечує пошук і позначення пакетів, які відповідають певним критеріям. Щоб спростити звернення до пакунків для швидкого ознайомлення, ви можете їх роздрукувати.
Щоб знайти пакети, що відповідають певним критеріям, відкрийте панель Find Packet, показану в стислому вигляді на рис. 4.4 натисканням комбінації клавіш <Ctrl+F>. Ця панель з’являється між панеллю “Фільтр” та вікном “Список пакетів”.
Ця панель надає три варіанти пошуку пакунків, як описано нижче.
Дисплей фільтра. Цей параметр дозволяє створити фільтр для пошуку тільки тих пакетів, які збігаються з заданим в ньому виразом. Саме ця опція використовується для пошуку пакетів для отримання результатів, показаних на рис. 4.4.
Значення Nex: використовуйте цю опцію для пошуку пакетів на основі вказаного шістнадцяткового значення. Рядок: використовуйте цей параметр для пошуку пакунків на основі вказаного рядка символів. Наприклад, ви можете вказати ім’я об’єкта для пошуку пакетів або бути чутливим до регістру в рядку пошуку.
Типи пошуку посилок зведені в табл. 4.1.
Після того, як ви вибрали тип пошуку пакета, введіть критерії пошуку в текстове поле та натисніть кнопку Знайти, щоб знайти перший пакет, який відповідає вказаним критеріям. Щоб знайти наступний пакет, натисніть кнопку Знайти ще раз або натисніть <Ctrl+N>, або натисніть <Ctrl+B> щоб знайти попередній пакет, який відповідав заданим критеріям.
Отже, знайшовши пакети, що відповідають заданим критеріям, можна відзначити ті, які цікавлять вас в першу чергу. Маркування упаковок, зокрема, дозволяє зберігати тільки ці пакети. Крім того, зазначені пакети можна швидко ідентифікувати по їх білому тексту на чорному тлі, як показано на рис. 4.5.
Щоб позначити пакет, клацніть його правою кнопкою миші на панелі “Список пакетів” і виберіть у контекстному меню пункт “Позначити пакет” (()mark package) або натисніть <Ctrl+M> на панелі “Список пакетів”. Ви можете позначити стільки захоплених пакетів, скільки вам потрібно. А для переміщення вперед або назад між зазначеними пакетами натисніть комбінацію клавіш <Shift+Ctrl+N> або <Shift+Ctrl+B> відповідно.
Незважаючи на те що велика частина аналізу проводиться на екрані монітора комп’ютера, перехоплені дані іноді потрібно роздрукувати. Час від часу я роздруковую перехоплені пакети і приклеюю отримані роздруківки на свій робочий стіл, щоб я міг швидко звернутися до їх вмісту за допомогою в міру проходження аналізу. Також зручно друкувати пакети в форматі PDF, особливо при підготовці звітів.
Для друку захоплених пакетів відкрийте діалогове вікно Print, вибравши File4Print у головному меню (рисунок 4.6).
Як і в діалоговому вікні «Експортувати зазначені пакети», в цьому вікні можна вказати, що пакети друкуються тільки в певних межах або ті пакети, які відображаються після застосування фільтра. Також можна вказати рівень деталізації, який потрібно надрукувати для кожного пакета. Після того, як ви вибрали всі параметри друку, натисніть на кнопку Друк.
Час дуже важливий, особливо для аналізу пакетів. Все, що відбувається в мережі, чутливо до часу, а тому часто доводиться вивчати тенденції і мережеві затримки в перехопленні файлів. Додаток Wireshark надає кілька настроюваних налаштувань, пов’язаних із часом. У цьому розділі розглянуті формати відображення часу і прив’язки до нього.
Формати відображення часу
Кожен пакет, перехоплений у Wireshark, має позначку часу на рівні операційної системи. Додаток Wireshark здатний відображати абсолютну мітку часу, що вказує на конкретний момент, коли пакет був перехоплений, час щодо останнього перехопленого пакета, а також початок і кінець перехоплення.
Параметри, пов’язані з відображенням часу, розташовані під заголовком Перегляд у головному меню. Пункт Time Display Format під цим заголовком головного меню дозволяє налаштувати формат представлення часу, а також точність його відображення, як показано на рис. 4.7.
Налаштування формату для представлення часу дозволяють вибирати різні параметри відображення часу. До них відноситься відображення дати і часу суг в стандартному форматі або в форматі всесвітнього координованого часу (UTC), кількості секунд, що минули з моменту останнього перехоплення, і так далі.
А настройки точності дозволяють встановлювати точність відображення часу автоматично, тобто в форматі, взятому з файлу перехоплення, або вручну, наприклад, в секундах, мілісекундах, мікросекундах і т.д.
Тимчасова прив’язка до пакетів дозволяє налаштувати конкретний пакет таким чином, що наступні обчислення часу проводяться щодо цього пакета. Ця функція особливо корисна при дослідженні серії послідовних подій, які відбуваються в інший момент, ніж коли починає формуватися файл перехоплення.
Щоб встановити посилання на час для пакета, клацніть правою кнопкою миші ваші вподобання як довідковий пакет на панелі “Список пакетів” і виберіть “Посилання на час SetnJnset” з контекстного меню. А для того, щоб скинути тимчасову прив’язку, повторіть ту ж операцію ще раз. Крім того, ви можете встановити та скинути тимчасове прив’язування до пакета, вибравши пакет посилань у підвікні Список пакетів та натиснувши юлавну комбінацію <Ctrl+T>.
Якщо ввімкнено прив’язку часу до пакета, мітка *REF* з’явиться у стовпці (Time), що відображається на панелі Packet List (рисунок 4.8).
Встановлювати прив’язку до часу пакету зручно тільки в тому випадку, якщо формат відображення часу перехоплення налаштований показувати час щодо початку перехоплення. І в будь-якому іншому випадку установка тимчасової прив’язки до пакету не зробить нічого корисного і фактично призведе до відображення моментів у часі, розібратися в яких буде дуже складно.
Іноді є пакети з різних джерел, які не синхронізовані з одним і тим же джерелом. Це особливо актуально при вивченні файлів перехоплення, знятих з двох місць, які містять один і той же потік даних. Більшість адміністраторів мережі прагнуть забезпечити синхронізацію всіх пристроїв у своїй мережі. Але нерідкі випадки, коли між певними типами пристроїв відбувається зсув у часі. Додаток Wireshark надає можливість зміщувати мітку часу в пакетах, щоб усунути цю складність під час аналізу.
Щоб змістити мітку часу в одній або декількох партіях, виберіть “Редагувати c>Time Shift” у головному меню або натисніть <Ctrl+Shift+T>. У діалоговому вікні “Зсув часу” ви можете вказати обмеження часу зсуву для всього файлу перехоплення в цілому або встановити час для окремих пакетів. У прикладі, показано на рис. 4.9, вибрано для зміщення мітки часу в кожному пакеті з файлу перехоплення на дві хвилини і п’ять секунд.
У попередньому розділі ми розглянули елементарний процес захоплення пакетів за допомогою налаштувань, встановлених у діалоговому вікні Capture lnterfaces. Але Wireshark надає чимало інших варіантів налаштування параметрів перехоплення, які ми ще не розглянули. Щоб отримати доступ до цих параметрів, виберіть команду Capture40ptions у головному меню.
Діалогове вікно Capture lnterfaces надає безліч настроюваних опцій, щоб зробити процес захоплення пакетів більш зручним. Він розділений на три вкладки: lnput (Вхід), 0utput (Вихід) і 0ptions (Параметри). Розглянемо їх по черзі.
Вкладка lnput
Основне призначення вкладки lnput (рисунок 4.10) – відображення всіх мережевих інтерфейсів, доступних для сніффінга пакетів, а також деякої основної інформації про кожен з цих інтерфейсів. Ця інформація включає зрозуміле ім’я мережевого інтерфейсу, яке надається на рівні операційної системи, графік мережевого трафіку, який чітко показує пропускну здатність інтерфейсу, і додаткові налаштування конфігурації, включаючи стан змішаного режиму мережевого інтерфейсу і розмір буфера. По правому краю вкладки, розглянутої тут, не показана на рис. 4.10, також є графа для відображення фільтра, застосованого при перехопленні. Детальніше про це піде мова в розділі «Фільтри перехоплення».
Вкладка Output
На вкладці 0utput (рис. 4.11) можна автоматично зберігати перехоплені пакети у файл замість того, щоб спочатку перехоплювати їх, а потім зберігати у файл. Адже набагато простіше маніпулювати збереженими посилками. Зокрема, захоплені пакети можуть зберігатися в одному файлі, в декількох файлах і навіть в кільцевому буфері, як пояснюється нижче, для маніпулювання рядом згенерованих файлів. Щоб увімкнути цей режим збереження перехоплених пакетів, введіть повне ім’я та ім’я файлу в текстове поле Файл. А для того, щоб вибрати каталог і вказати ім’я файлу, натисніть кнопку Огляд… (Прос.мотр).
Якщо вам належить перехопити велику кількість мережевого трафіку або виконати перехоплення в довгостроковій перспективі, то особливо зручними для цієї мети будуть набори файлів – колекції з декількох файлів, виділених в окремі групи за спеціальною умовою. Щоб вказати набір файлів, поставте галочку навпроти пункту Автоматично створювати нову флешку… (Автоматично створювати новий файл після…).
Для збереження перехоплених пакетів у наборах файлів із заданим розміром або інтервалом часу Wireshark використовує спеціальні тригери, Щоб активувати один з цих тригерів, виберіть кнопку-перемикач під прапорцем, згаданим вище, а потім вкажіть бажане порогове значення та одиницю виміру спрацьовування спускового гачка. Наприклад, можна встановити тригер для запуску процесу і створити новий файл після кожного перехоплення 1 Мб мережевого трафіку, як показано на рисунку 1. 4.12, або кожну хвилину при перехопленні мережевого трафіку.
Прапорець Use а ring buffer with”. .. (Використовуйте кільцевий буфер з…) дозволяє вказати певну кількість файлів, які повинні бути накопичені в наборі інструментами Wireshark перед їх перезаписом. І хоча термін кільцевий буфер має різні значення, в даному випадку він по суті відноситься до набору файлів, де перший файл може бути перезаписаний, як тільки останній записаний файл буде введений в набір з метою збереження знову отриманих даних. Іншими словами, цей прапорець встановлює режим запису файлів за принципом порядку надходження заявок (FIFO). Встановивши цей прапорець, можна вказати максимальну кількість файлів для зберігання в буфері кільця кругового зсуву. Припустимо, що для зберігання перехопленого мережевого трафіку обраний набір з шести файлів, і щогодини створюється новий файл. Таким чином, утворюється кільцевий буфер з 6 файлів. Як тільки буде створений шостий файл, в кільцевому буфері відбудеться круговий зсув при перезаписі першого файлу, замість створення сьомого файлу для зберігання наступного масиву перехоплених даних. Це гарантує, що на жорсткому диску протягом 6 годин буде зберігатися не більше шести файлів даних з можливістю запису нових даних.
І, нарешті, на вкладці Output можна також вказати конкретний формат файлу даних. Так, можна вибрати традиційний формат Рсар, якщо перед належить взаємодія зі збереженими пакетами в інструментальному засіб, не здатний обробляти файли з розширенням .pcapng.
Вкладка Options
Вкладка 0ptions містить ряд інших опцій вибору режиму збереження перехоплених пакетів, включаючи настройки відображення, трансляції імен і перехоплення переривань, як показано на рис. 4.13.
Параметри настроювання дисплея
Розділ Display 0ptions містить елементи, які керують порядком відображення пакетів при їх захопленні. Мета прапорця Оновити список пакетів у режимі реального часу зрозуміла. Його можна встановити разом із прапорцем Автоматично прокручувати під час зйомки в реальному часі. Коли обидва ці прапорці встановлені, всі перехоплені пакети відображаються на екрані, а найновіші відображаються негайно.
За допомогою діалогового вікна Показати додаткові відомості про захоплення можна ввімкнути або заборонити відображення невеликого вікна, яке показує відсоток захоплених пакетів, відсортованих за мережним протоколом. Особисто я вважаю за краще відображати це інформаційне вікно, так як зазвичай забороняю активну прокрутку вікна відображення пакетів під час їх перехоплення.
Параметри налаштування роздільної здатності імен
У розділі Name Resolution можна встановити режим трансляції MAC-адрес (другий рівень), а також режим дозволу імен мережі і транспорту (третій і четвертий рівень відповідно). Загальні питання вирішення назв будуть більш детально розглянуті в главі 5 «Додаткові можливості Wireshark».
Параметри зупинки перехоплення
У розділі Зупинити автоматичне захоплення… (Автоматичне припинення перехоплення після…) Можна вказати певні умови, при яких перехоплення буде зупинено. Як і під час створення набору файлів, ви можете зупинити перехоплення за вказаним розміром файлу або періодом часу. Але це також можна зробити для зазначеної кількості упаковок. Зручно поєднувати настройки в цьому розділі з настройками, наявними на вкладці 0utput.
За допомогою фільтрів можна вказати пакети, які потрібні для аналізу. Простіше кажучи, фільтр – це вираз, який задає критерії включення або виключення пакетів з аналізу. Наприклад, якщо у вас є пакунки, які ви не бажаєте переглядати, ви можете створити фільтр, щоб позбутися їх. А якщо ви хочете бачити лише певні пакунки, ви можете створити фільтр, щоб показувати лише їх.
Наступні типи фільтрів надаються в додатку Wireshark.
Фільтри перехоплення. Використовується, коли потрібно захопити тільки ті пакети, які вказані для включення або виключення в зазначений вираз.
Відображення фільтрів. Застосуйте до існуючої серії пакунків, щоб приховати непотрібні пакунки або показати потрібні пакунки на основі заданого виразу.
Фільтри цього типу використовуються в процесі пронюхування пакетів для того, щоб спочатку обмежити кількість пакетів, що надаються на аналіз. Одна з головних причин використання фільтрів перехоплення – продуктивність. Якщо ви заздалегідь знаєте, що вам не потрібно аналізувати певну форму мережевого трафіку, ви можете відфільтрувати його за допомогою фільтра перехоплення, заощадивши час процесора, який зазвичай потрібен для захоплення відповідних пакетів.
Можливість створення спеціальних фільтрів перехоплення буде зручна, якщо доводиться мати справу з великими обсягами даних. Їх аналіз можна прискорити, відфільтрувавши тільки ті пакети, які потрібні для вирішення поточної задачі аналізу.
Припустимо, ви вирішуєте проблему діагностики служби, що працює на порту 262, але на аналізованому сервері працює ряд служб на різних портах. Перехоплення і аналіз мережевого трафіку тільки через один порт – завдання не з легких. І ось тут може стати в нагоді фільтр перехоплення.
Для цього просто скористайтеся діалоговим вікном Capture Interfaces наступним чином.
Виберіть команду Capture c> Options у головному меню, щоб відкрити діалогове вікно Capture lnterfaces.
Виберіть мережевий інтерфейс, у якому потрібно записувати пакети, а потім прокрутіть до крайнього правого стовпця Фільтр захоплення.
Щоб застосувати фільтр перехоплення, клацніть цей стовпець і введіть вираз фільтра. У цьому випадку потрібно лише відфільтрувати вхідний та вихідний мережевий трафік на порту 262, тому введіть порт 262, як показано на рисунку 262. 4.14. (Фільтруючі вирази більш детально розглянуті в наступному розділі.) Колір клітинки в цьому стовпці повинен змінитися на зелений, що свідчить про те, що введено допустимий вираз. Якщо він ненадійний, осередок буде підсвічена червоним кольором.
Після налаштування філира натисніть на кнопку Star1, щоб почати перехоплення.
В результаті ви повинні бачити тільки мережевий трафік, який проходить через порт 262. Отже, це дасть вам можливість ефективніше аналізувати дані цього конкретного трафіку.
Фільтри перехоплення, які використовуються у драйверах libpcap/WinPcap, описано за допомогою синтаксису Berkeley Packet Filter (BPE). Цей синтаксис є спільним для багатьох програм для нюхання пакетів, головним чином тому, що вони покладаються на бібліотеки libpcap/WinPcap, які використовують синтаксис BPE для опису фільтрів. Для поглибленого аналізу мережі на рівні пакетів знання синтаксису BPF має вирішальне значення.
Фільтр, створений за допомогою синтаксису BPF, називається виразом, і кожен вираз складається з одного або декількох примітивів. У свою чергу, примітиви складаються з одного або декількох класифікаторів, перерахованих в табл. 4.2, а також найменування або номер ідентифікатора, як показано на рис. 4.15.
Беручи до уваги складові вирази, класифікатор переходу на літній час та ідентифікатор 192 .168 .0.10 разом утворюють примітив. Таке примітивне саме по собі є виразом, що визначає перехоплення мережевого трафіку тільки за ІЧ-адресою одержувача 192 .168. 0 .10. Ви можете використовувати логічні операції для об’єднання примітивів для створення більш складних виразів.
І для цього існують наступні логічні операції.
Логічна операція об’єднання відносно AND
Операція логічної диз’юнкції за допомогою OR ().
Логічна операція заперечення через NOT (! ).
Наприклад, наступний вираз перехоплює тільки мережевий трафік, що походить з джерела, розташованого за адресою 1P 192 .168. 0 .10 і проходження через порт відправника або одержувача 80:
src host 192.168.0.10 && port 80
Більшість фільтрів створюється для аналізу певного мережевого пристрою або групи подібних пристроїв. Залежно від обставин фільтрація може базуватися на MAC-адресі пристрою, IPv4 або IPv6-адресах та імені хоста DNS.
Припустимо, ви хочете проаналізувати мережевий трафік конкретного хоста, який спілкується з сервером в мережі. Щоб перехопити весь мережевий трафік, пов’язаний з IPv4-адресою певного хоста, можна створити такий фільтр на сервері за допомогою класифікатора хостів:
ost 172.16.16.149
Якщо ви аналізуєте мережу IPv6, фільтр слід створити на основі IPv6-адреси за допомогою класифікатора хостів:
host 2001:dЬ8:85а3::8а2е:З70:7334
Також можна створити фільтр на основі імені хоста мережевого пристрою за допомогою класифікатора хоста, як описано нижче.
host testserver2
І якщо ви хочете врахувати можливу зміну 1P-адреси хоста, ви можете створити фільтр на основі його MAC-адреси, додавши класифікатор протоколу ефіру, як показано нижче.
ether host 00-la-a0-52-e2-a0
Нерідкі випадки, коли класифікатори напрямку даних використовуються разом із фільтрами (наприклад, у прикладах вище) для перехоплення мережевого трафіку на основі того, чи є трафік вхідним чи вихідним від хоста. Наприклад, щоб перехопити лише мережевий трафік, що походить із певного хоста, вам потрібно буде доповнити фільтр кваліфікатором src наступним чином:
src host 172.16.16.149
А для того, щоб перехопити тільки ті дані, які призначені для хоста на 172.16.16.149, слід доповнити вищевказаний фільтр класифікатором dst:
dst host 172.16.16.149
Якщо фільтр не використовує класифікатор типів (host, net або port) з примітивом, то передбачається класифікатор хоста. Тому наступний вираз, який не має такого класифікатора, рівнозначний виразу з попереднього прикладу.
dst 172.16.16.149
На додаток до фільтрації хостів, створюваний вами фільтр може базуватися на портах, що використовуються в кожному пакеті. Фільтрація портів може виконуватися для фільтрації служб і додатків, які використовують порти відомих служб. Наприклад, наступний приклад показує простий фільтр, який призначений лише для перехоплення мережевого трафіку, що надходить або виходить з порту 8080:
port 8080
Для перехоплення всього мережевого трафіку, крім порту 8080, підійде наступний фільтр:
!port 8080
Фільтри портів можна комбінувати з фільтрами напрямку даних. Наприклад, якщо потрібно перехопити лише мережний трафік, який надсилається на веб-сервер для отримання через стандартний порт 80 мережного протоколу NTGR, можна скористатися класифікатором літнього часу у фільтрі таким чином:
dst port 8080
Фільтри цього типу дозволяють фільтрувати пакети за допомогою певних мережевих протоколів. Вони використовуються для відображення мережевих протоколів, які не пов’язані з прикладним рівнем і не можуть бути ідентифіковані тільки на конкретному порту. Наприклад, якщо потрібно переглянути лише мережевий трафік ICMP, можна скористатися таким фільтром:
icmp
А для перегляду всього мережевого трафіку, крім протоколу IPv6, підійде наступний фільтр:
!ip6
Однією з найбільших сильних сторін синтаксису BPF є можливість перевірки кожного байта в заголовку протоколу для створення користувацьких фільтрів на основі інформації, отриманої про конкретний протокол. Спеціальні фільтри, розглянуті в цьому розділі, дозволяють витягти певну кількість байт з пакета, починаючи з певного місця.
Скажімо, потрібно відфільтрувати мережевий трафік за полем типу в заголовку ICMP. Поле типу розташовується на самому початку пакета, тобто має нульове зміщення. Щоб вказати розташування досліджуваного поля в пакеті, досить вказати в квадратних дужках зміщення в байтах після класифікатора протоколів (в даному прикладі – icmp [О]). В результаті буде повернуто однобайтове значення, яке можна з чимось порівняти. Наприклад, якщо потрібно отримувати лише пакети, які передаються за протоколом керуючих повідомлень Інтернету (ICMP) і представляють повідомлення типу 3 про недосяжність одержувача, слід скористатися операцією рівності у виразі фільтра, як показано нижче.
cmp[O] == 3
А для того, щоб розглянути тільки пакети, що передаються по мережевому протоколу ICMP і представляють собою ехо-запит (тип 8) або відгук луна (тип 0), в виразі фільтра можна використовувати два примітиви і логічну операцію OR наступним чином:
cmp[O] == 8 OR icmp[O] == О
Незважаючи на те, що спеціальні фільтри роблять свою справу, в їх основі лежить тільки однобайтова інформація з заголовка пакета. Однак у виразі фільтра можна також вказати довжину повернутих даних у байтах після значення числового зсуву у квадратних дужках, розділених двокрапкою.
Наприклад, припустимо, що потрібно створити фільтр для перехоплення всіх пакетів, переданих по мережевому протоколу ICMP для недосяжного одержувача, хоста і ідентифікованих типом 3 і кодом 1. Однобайтові поля з цими даними розташовуються одне за одним в заголовку пакета, починаючи зі зміщення нуля. Для цього ви можете створити фільтр, який перевіряє два початкові байти з нульовим зміщенням у заголовку пакета, який порівнює його з шістнадцятковим значенням 0301 (тобто тип 3 і код 1) наступним чином:
icmp[0:2] == ОхОЗОl
Часто вам потрібно лише захопити пакети, які передаються по мережевому протоколу TCP з встановленим прапором RST. Більш детально протокол TCP буде розглянуто в главі 8 «Протоколи транспортного рівня», а поки досить сказати, що прапорці розташовані в поле пакета TCP зі зміщенням 13. Це поле цікаво тим, що його довжина дорівнює одному байту, де кожен біт позначає окремий прапор. Як пояснюється в Додатку B, «Інтерпретація пакетів», кожен біт з встановленим в ньому прапором представляється в такому байті числом base-2. Так, перший біт представлений цифрою 1, другий біт – числом 2, третій – числом 4 і так далі. Тому одного значення tcp [ 13) недостатньо для ефективної їх фільтрації, так як заданому біту RST може відповідати кілька значень.
Замість цього ви повинні вказати розташування прапора, який буде перевірятися в байтах, додавши вираз фільтра амперсандом (‘) і числом, що представляє біт, в якому зберігається прапор. Зокрема, прапор RST зберігається в біті, представленому в цьому байті цифрою 4, яка вказує на те, що прапор RST встановлений. Таким чином, фільтр для розглянутих тут цілей буде виглядати так:
tcp[lЗ] & 4 == 4
А для того, щоб переглянути всі пакети з набором прапорів PSH, який зберігається в біті, представленому цифрою 8 в поле пакета TCP зі зміщенням 13, досить скористатися наступним фільтром:
tcp[lЗ] & 8 == 8
Часто успіх або невдача сніффінга пакетів залежить від уміння створювати фільтри, відповідні конкретній ситуації. У табл. У таблиці 4.3 наведені деякі приклади виразів для фільтрів перехоплення, які часто використовуються в аналізі пакетів.
Цей тип включає фільтри, застосування яких до файлу перехоплення означає, що в Wireshark повинні відображатися лише пакети, які відповідають цьому фільтру. Ви можете створити фільтр відображення в текстовому полі “Фільтр” над панеллю “Список пакетів”.
Фільтри відображення використовуються частіше, ніж фільтри перехоплення, оскільки вони дозволяють фільтрувати непотрібні дані, не видаляючи їх фізично з файлу перехоплення. Наприклад, якщо потрібно змінити вихідну умову перехоплення, можна просто очистити вираз фільтра. Крім того, фільтри дисплеїв виявляються набагато ефективнішими завдяки підтримці великої бібліотеки дешифраторів пакетів, доступної в Wireshark.
Наприклад, в деяких випадках фільтр дисплея може використовуватися для фільтрації невідповідного трафіку трансляції з файлу перехоплення. При цьому панель «Список пакетів» відфільтровує ті ARP-пакети мовлення, які не мають нічого спільного з поточною аналізованої проблемою в мережі. Але оскільки ці пакети мовлення ARP виявляться корисними в майбутньому, краще тимчасово відсіяти їх, а не видаляти повністю.
Щоб відфільтрувати всі пакети ARP у вікні захоплення, помістіть курсор у текстове поле “Фільтр” над панеллю “Список пакетів” і введіть !arp. В результаті всі ARP-пакети були видалені зі списку (рис. 4.16). Щоб видалити введений фільтр дисплея, натисніть кнопку X, а щоб зберегти фільтр для подальшого використання, натисніть кнопку плюс (+).
Фільтри дисплея можна застосовувати двома способами. Один – використовувати безпосередньо відповідний синтаксис, як показано в попередньому прикладі, а інший – використовувати діалогове вікно Вираз фільтра для створення фільтра в діалоговому режимі. Це більш простий спосіб для тих, хто тільки починає користуватися фільтрами. Давайте розглянемо обидва способи застосування фільтрів відображення, починаючи з більш простого.
Особливості діалогового вікна Display Filter Expression показано на рис. 4.17 значно полегшує початківцям користувачам Wireshark створення фільтрів перехоплення та відображення. Щоб отримати доступ до цього вікна, виберіть команду Filter4Expression у головному меню.
У лівій частині цього вікна перераховані всі доступні поля мережевого протоколу, де вказані всі можливі критерії фільтрації.
Щоб створити фільтр, виконайте такі дії:
Клацніть стрілку поруч з іменем мережного протоколу, щоб переглянути пов’язані з ним поля умов. Знайшовши критерії, які ви хочете взяти за основу для створення фільтра, натисніть на нього, щоб вибрати.
Виберіть порядок, у якому вибране поле порівнюється зі значенням з умов. На таке порівняння вказує операція більше, менше, дорівнює і так далі.
Створіть вираз фільтра, вказавши значення з критеріїв, з якими слід порівняти вибране поле. Це значення можна вказати вручну або вибрати зі списку значень, попередньо визначених у Wireshark.
Отриманий фільтр з’явиться внизу екрана. Завершивши, натисніть кнопку OK, щоб ввести його в панель фільтра.
Діалогове вікно Display Filter Expression дуже зручне для початківців користувачів Wireshark, але отримавши певний досвід складання фільтрів, ви виявите, що введення виразів фільтра вручну набагато ефективніше. Синтаксична структура створення дисплейних фільтрів дуже проста, хоча і досить ефективна.
Чим частіше ви використовуєте Wireshark, тим більше вам доведеться використовувати фільтри відображення безпосередньо в головному вікні програми, щоб заощадити час. Однак синтаксис створення дисплейних фільтрів простий і дотримується стандартної структури. Найчастіше ця структура орієнтується на мережеві протоколи і слід формату протоколу. засіб. підлеглий інструмент. У цьому не важко переконатися, подивившись на діалогове вікно Display Filter Expression. Тепер давайте розглянемо ряд прикладів, які демонструють, як будувати фільтри дисплея.
Найчастіше фільтри перехоплення або відображення використовуються для перегляду пакетів по окремому мережевому протоколу. Припустимо, ви хочете діагностувати проблему, що виникла на рівні мережевого протоколу TCP, і для цього перехопити тільки мережевий трафік за цим протоколом. Для цього цілком підійде простий tcp-фільтр.
Тепер давайте подивимося на цю проблему під іншим кутом. Припустимо, що при діагностиці проблеми на рівні мережевого протоколу TCP досить інтенсивно використовувалася утиліта Ping, що призвело до формування великої кількості мережевого трафіку по протоколу ICMP. Щоб відфільтрувати цей трафік з файлу перехоплення, просто застосуйте вираз ! ІФКС.
Операції порівняння дозволяють порівнювати окремі величини. Наприклад, при діагностиці TCP/IP мереж часто доводиться дивитися на всі пакети з посиланнями на конкретний 1P-адресу. Використовуючи операцію порівняння рівності (—), можна створити наступний фільтр, який відображатиме всі пакети з адресою 192 .168. 0 .1:
ip.addr==l92.168.0.l
Тепер припустимо, що ви хочете переглядати тільки ті пакети, довжина яких менше 128 байт. Для цього можна скористатися операцією порівняння менша або рівна рівність (<=) у наступному фільтрі:
frarne.len<=128
У табл. На рисунку 4.4 наведені всі операції порівняння, що використовуються у виразах фільтрів, що генеруються у Wireshark.
Логічні операції дають змогу об’єднувати кілька виразів фільтра в одному операторі. І завдяки цьому помітно підвищується ефективність використовуваних фільтрів.
Скажімо, ви хочете відображати пакети лише за двома адресами 1P. Щоб створити один вираз для фільтрації пакетів, які містять обидві IP-адреси, можна скористатися або логічною операцією наступним чином:
ip.addr==192.168.0.1 or ip.addr==192.168.0.2
У табл. На рисунку 4.5 показані всі логічні операції, що використовуються у виразах фільтрів, складених у Wireshark.
Незважаючи на те що принципи, за якими складаються фільтруючі вирази, досить прості, в процесі створення нових фільтрів для вирішення різних завдань доводиться використовувати ряд спеціальних ключових слів та операції. У табл. 4.6 наводить деякі приклади виразів для найбільш поширених фільтрів дисплея, а повний список можна знайти в довідковому посібнику з фільтрів дисплея, доступному за адресою http : / /www.wireshark.org/docs/dfref/.
Як тільки ви почнете створювати значну кількість фільтрів перехоплення та відображення, ви можете виявити, що деякі з них використовуються досить часто. При цьому їх не обов’язково вводити кожен раз, коли вони потрібні, так як Wireshark надає можливість збереження фільтрів для подальшого використання.
Отже, щоб зберегти спеціальний фільтр перехоплення, виконайте наступні дії:
Клацніть Capture4Capture Filters, щоб відкрити діалогове вікно Фільтр захоплення.
Щоб створити новий фільтр, натисніть кнопку “плюс” (+) у нижньому лівому куті діалогового вікна.
Введіть назву нового фільтра в полі Назва фільтра.
Введіть вираз фільтра в полі Рядок фільтра.
Натисніть кнопку OK, щоб зберегти вираз фільтра.
Щоб зберегти спеціальний фільтр відображення, виконайте наведені нижче дії.
Введіть фільтр на панелі “Фільтр”, розташованій над панеллю “Список пакетів” у головному вікні Wireshark, а потім натисніть кнопку зеленої стрічки на лівому краю панелі.
Виберіть “Зберегти цей фільтр” у спливаючому меню. Окреме діалогове вікно надасть список.
Якщо у вас є фільтри, які ви часто використовуєте, найпростіший спосіб взаємодії з ними – розмістити їх мітки на панелі фільтрів, згаданій вище.
Для цього виконайте такі дії:
Введіть свій фільтр на панелі “Фільтр”, розташованій над панеллю “Список пакетів” у головному вікні Wireshark, а потім натисніть кнопку плюс (+) у правій частині панелі.
Під панеллю “Фільтр” з’явиться нова панель, де можна вказати назву вашого фільтра в полі “Мітка” (Label; рис. 4.19). Вказана мітка слугуватиме для представлення фільтра на панелі інструментів. Після введення мітки в це поле натисніть кнопку OK, щоб створити мітку для швидкого доступу до фільтра на панелі “Фільтр”.
Як показано на рис.. 4.20, в цьому (:luc вдалося створити ярлик фільтра для швидкого відображення будь-яких пакетів TCP з встановленим прапором RST. Фільтри, розміщені на панелі інструментів, зберігають(‘.i у файлі конфігурації, згаданому в розділі H, “Вступ до Wireshark”. Це значно розширює вашу здатність виявляти проблеми з мережею на рівні пакетів у різних ситуаціях.
Wireshark поставляється з рядом вбудованих фільтрів, які служать особистими прикладами для створення власних фільтрів. Використовуйте їх разом із довідковими сторінками Wireshark під час створення власних фільтрів. Ми будемо багато використовувати фільтри в прикладах, показаних далі в цій книзі.
Ми використовували матеріали з книги “PRACTICAL РАСКЕТ ANALYSIS ”, яку написав Кріс Сандерс.