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

Читайте також: Керівництва по налаштуванню інтернет-з'єднання в Ubuntu , Debian , Ubuntu Server

установка

Більшість розробників операційних систем на базі Linux включають утиліту tcpdump в список встановлених, але якщо з якоїсь причини вона в вашому дистрибутиві відсутній, її можна завжди скачати і встановити через «Термінал». Якщо у вас ОС заснована на Debian, а це Ubuntu, Linux Mint, Kali Linux і їм подібні, потрібно виконати цю команду:

sudo apt install tcpdump

При установці вам потрібно ввести пароль. Зверніть увагу, що при наборі він не відображається, також для підтвердження установки потрібно ввести символ «Д» і натиснути Enter.

Якщо у вас Red Hat, Fedora або CentOS, то команда для установки буде мати наступний вигляд:

sudo yam install tcpdump

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

Читайте також: Керівництво по установці PHP в Ubuntu Server

синтаксис

Як і будь-яка інша команда, tcpdump має свій синтаксис. Знаючи його, ви зможете задавати всі необхідні параметри, які будуть враховуватися при виконанні команди. Синтаксис має наступний вигляд:

tcpdump опции -i интерфейс фильтры

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

Опції

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

опція визначення
-A Дозволяє впорядкувати пакети з форматом ASCII
-l Додає функцію прокрутки
-i Після введення потрібно вказати мережевий інтерфейс, який буде відслідковуватися. Щоб почати відстежувати всі інтерфейси, впишіть після опції слово «any»
-c Завершує процес відстеження після перевірки зазначеної кількості пакетів
-w Генерує текстовий файл зі звітом перевірки
-e Показує рівень інтернет-з'єднання пакета даних
-L Виводить тільки ті протоколи, які підтримує вказаний мережевий інтерфейс
-C Створює інший файл під час запису пакета, якщо його розмір більше заданого
-r Відкриває файл для читання, який був створений за допомогою опції -w
-j Для запису пакетів буде використовуватися формат TimeStamp
-J Дозволяє переглянути всі доступні формати TimeStamp
-G Служить для створення файлу з балками. Опція вимагає також вказівки тимчасового значення, після закінчення якого буде створюватися новий лог
-v, -vv, -vvv Залежно від кількості символів в опції, висновок команди буде ставати докладніше (збільшення прямо пропорційно кількості символів)
-f У висновку показує ім'я домену адрес IP
-F Дозволяє зчитувати інформацію не з мережевого інтерфейсу, а із зазначеного файлу
-D Демонструє всі мережеві інтерфейси, які можна використовувати
-n Деактивує відображення доменних імен
-Z Задає користувача, під обліковим записом якого будуть створені всі файли
-K Пропуск аналізу контрольних сум
-q Демонстрація короткої інформації
-H Дозволяє виявити заголовки 802.11s
-I Використовується при захопленні пакетів в режимі монітора

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

фільтри

Як говорилося на самому початку статті, ви можете додавати в синтаксис tcpdump фільтри. Зараз будуть розглянуті найбільш популярні з них:

Фільтр визначення
host Служить для вказівки імені хоста
net Вказує IP підмережі і мережі
ip Служить для вказівки адреси протоколу
src Виводить пакети, які були відправлені із зазначеної адреси
dst Виводить пакети, які були отримані вказаною адресою
arp, udp, tcp Фільтрація по одному з протоколів
port Відображає інформацію, що відноситься до певного порту
and, or Служить для об'єднання декількох фільтрів в команді
less, greater Висновок пакетів менше або більше зазначеного розміру

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

Читайте також: Часто використовувані команди в «Терміналі» Linux

приклади використання

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

Перегляд списку інтерфейсів

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

sudo tcpdump -D

приклад:

виконання команди tcpdump з опцією d в linux

Як ви можете помітити, в прикладі є вісім інтерфейсів, які можна переглянути за допомогою команди tcpdump. У статті будуть приводитися приклади з ppp0, ви ж можете використовувати будь-який інший.

Звичайний захоплення трафіку

Якщо потрібно відстежити один мережевий інтерфейс, то зробити це ви можете за допомогою опції -i. Не забудьте після її введення вказати найменування інтерфейсу. Ось приклад виконання такої команди:

sudo tcpdump -i ppp0

Зверніть увагу: перед самою командою потрібно вписати «sudo», так як вона вимагає права суперкористувача.

приклад:

приклад відображення трафіку мережевого інтерфейсу за допомогою команди tcpdump без використання опцій і фільтрів

Примітка: після натискання Enter в «Терміналі» безперервно будуть відображатися перехоплені пакети. Щоб зупинити їх потік, потрібно натиснути комбінацію клавіш Ctrl + C.

Якщо ви виконуєте команду без додаткових опцій і фільтрів, то побачите наступний формат відображення відстежених пакетів:

22:18:52.597573 IP vrrp-topf2.p.mail.ru.https > 10.0.6.67.35482 : Flags [P.], seq 1:595, ack 1118, win 6494, options [nop,nop,TS val 257060077 ecr 697597623], length 594

Де кольором виділено:

  • синім - час отримання пакета;
  • помаранчевим - версія протоколу;
  • зеленим - адреса відправника;
  • фіолетовим - адреса одержувача;
  • сірим - додаткова інформація про tcp;
  • червоним - розмір пакета (в байтах).

Цей синтаксис має можливість виведення у вікні «Терміналу» без використання додаткових опцій.

Захоплення трафіку з опцією -v

Як відомо з таблиці, опція -v дозволяє збільшити кількість інформації. Розберемо на прикладі. Перевіримо той же інтерфейс:

sudo tcpdump -v -i ppp0

приклад:

приклад відображення трафіку мережевого інтерфейсу за допомогою команди tcpdump з використанням опції -v в linux

Тут можна помітити, що з'явилася наступна рядок у висновку:

IP (tos 0x0, ttl 58 , id 30675, offset 0, flags [DF] , proto TCP (6) , length 52

Де кольором виділено:

  • помаранчевим - версія протоколу;
  • синім - тривалість життя протоколу;
  • зеленим - довжина заголовка поля;
  • фіолетовим - версія пакету tcp;
  • червоним - розмір пакета.

Також в синтаксис команди ви можете прописати опцію -vv або -vvv, що дозволить ще більше збільшити обсяг інформації, що виводиться на екран.

Опція -w і -r

У таблиці опцій згадувалося про можливість зберігати всі виведені дані в окремий файл, щоб пізніше їх можна було переглянути. За це відповідає опція -w. Користуватися їй досить просто, всього-на-всього вкажіть її в команді, а потім впишіть назву майбутнього файлу з розширенням «.pcap». Розглянемо всі на прикладі:

sudo tcpdump -i ppp0 -w file.pcap

приклад:

приклад опції -w в команді tcpdump в linux

Зверніть увагу: під час запису логів в файл на екрані «Терміналу» не відображається ніякої текст.

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

sudo tcpdump -r file.pcap

приклад:

приклад перегляду раніше збереженого файлу команди tcpdump за допомогою опції w

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

Фільтрація за IP

З таблиці фільтрів ми знаємо, що dst дозволяє вивести на екран консолі тільки ті пакети, які були отримані адресою, що вказана в синтаксисі команди. Таким чином дуже зручно переглядати пакети, отримані вашим комп'ютером. Для цього в команді потрібно всього лише вказати свій IP-адресу:

sudo tcpdump -i ppp0 ip dst 10.0.6.67

приклад:

приклад використання фільтра dst і ip в команду tcpdump в linux

Як можна помітити, крім dst, в команді ми прописали також фільтр ip. Іншими словами, ми сказали комп'ютера, щоб при відборі пакетів він звертав увагу на їх IP адреса, а не на інші параметри.

За IP можна відфільтрувати і відправляються пакети. У прикладі наведемо знову наш IP. Тобто зараз ми відслідкуємо які пакети відправляються з нашого комп'ютера на інші адреси. Для цього потрібно виконати наступну команду:

sudo tcpdump -i ppp0 ip src 10.0.6.67

приклад:

приклад використання фільтра src і ip в команді tcpdump в linux

Як можна помітити, в синтаксисі команди ми змінили фільтр dst на src, тим самим сказавши машині, щоб вона шукала відправника по IP.

Фільтрація за HOST

За аналогією з IP в команді ми можемо вказати фільтр host, щоб відсіяти пакети з цікавлять хостом. Тобто в синтаксисі замість IP-адреси відправника / одержувача потрібно буде вказувати його хост. Виглядає це наступним чином:

sudo tcpdump -i ppp0 dst host google-public-dns-a.google.com

приклад:

приклад використання фільтра dst і host в команді tcpdump в linux

На зображенні можна побачити, що в «Терміналі» відображаються тільки ті пакети, які були відправлені з нашого IP на хост google.com. Як можна зрозуміти, замість хоста google, можна вписати будь-який інший.

Як і у випадку з фільтрацією по IP, в синтаксисі dst можна замінити на src, щоб переглянути список пакунків, які відправляються на ваш комп'ютер:

sudo tcpdump -i ppp0 src host google-public-dns-a.google.com

Зверніть увагу: фільтр host повинен стояти після dst або src, інакше команда видасть помилку. У випадку з фільтрацією по IP, навпаки, dst і src стоять перед фільтром ip.

Застосування фільтру and і or

Якщо у вас виникає потреба використовувати відразу кілька фільтрів в одній команді, то для цього потрібно застосовувати фільтр and або or (залежить від випадку). Вказуючи фільтри в синтаксисі і розділяючи їх цими оператором, ви «змусите» працювати їх як один. На прикладі це виглядає наступним чином:

sudo tcpdump -i ppp0 ip dst 95.47.144.254 or ip src 95.47.144.254

приклад:

приклад використання фільтра and і or в команді tcpdump в linux

З синтаксису команди видно, що ми хочемо вивести на екран «Терміналу» все пакети, які були відправлені на адресу 95.47.144.254 і пакети, отримані цим же адресою. Також ви можете змінювати деякі змінні в цьому виразі. Наприклад, замість IP вказати HOST або замінити безпосередньо самі адреси.

Фільтр port і portrange

Фільтр port відмінно підійде в тих випадках, коли потрібно отримати інформацію про пакетах з певним портом. Так, якщо вам потрібно побачити лише відповіді або запити DNS, потрібно вказати порт 53:

sudo tcpdump -vv -i ppp0 port 53

приклад:

приклад використання фільтра port в команді tcpdump в linux

Якщо ви хочете переглянути пакети http, потрібно ввести порт 80:

sudo tcpdump -vv -i ppp0 port 80

приклад:

приклад застосування фільтра port в команді tcpdump в linux

Крім іншого, є можливість відстежити відразу діапазон портів. Для цього застосовується фільтр portrange:

sudo tcpdump portrange 50-80

приклад використання фільтра portrange в синтаксисі команди tcpdump в linux

Як можна помітити, в зв'язці з фільтром portrange не обов'язково вказувати додаткові опції. Достатньо всього лише задати діапазон.

Фільтрація по протоколам

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

sudo tcpdump -vvv -i ppp0 udp

приклад:

приклад фільтрації команди tcpdump по протоколу в linux

Як можна побачити на зображенні, після виконання команди в «Терміналі» відобразилися лише пакети з протоколом udp. Відповідно, ви можете здійснити фільтрацію і по іншим, наприклад, arp:

sudo tcpdump -vvv -i ppp0 arp

або tcp:

sudo tcpdump -vvv -i ppp0 tcp

Фільтр net

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

sudo tcpdump -i ppp0 net 192.168.1.1

приклад:

приклад фільтрації команди tcpdump по позначенню мережі в linux

Фільтрація за розміром пакета

Ми не розглянули ще два цікавих фільтра: less і greater. З таблиці з фільтрами ми знаємо, що вони служать для виведення пакетів даних більше (less) або менше (greater) розміру, зазначеного після введення атрибута.

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

sudo tcpdump -i ppp0 less 50

приклад:

фільтрація пакетів за їх розміром фільтр less в команді tcpdump в linux

Тепер давайте відобразимо в «Терміналі» пакети, розмір яких більше 50 біт:

sudo tcpdump -i ppp0 greater 50

приклад:

фільтрація пакетів за їх розміром фільтр greater в команді tcpdump в linux

Як можна помітити, застосовуються вони однаково, різниця лише в назві фільтра.

висновок

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