приклади tcpdump в Linux

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

Читайте також: посібники з налаштування підключення до Інтернету в Ubuntu , Debian , Ubuntu Server

Встановлення

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

Sudo apt install tcpdump

При установці вам потрібно ввести пароль. Зверніть увагу, що при наборі він не відображається, також для підтвердження установки потрібно ввести символ»D" і натиснути 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.11 s
-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 (залежить від випадку). Вказуючи фільтри в синтаксисі та розділяючи їх цими операторами, ви &171;змусите&187; працювати їх як один. На прикладі це виглядає наступним чином:

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 - це відмінний інструмент, за допомогою якого можна відстежити будь-який переданий по інтернету пакет даних. Але для цього недостатньо просто ввести саму команду в «Термінал» . Домогтися бажаного результату вийде тільки в разі, якщо використовувати всілякі опції і фільтри, а також їх комбінації.

більше статей на цю тему: