Якщо вам необхідно проаналізувати або перехопити мережеві пакети в 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. У статті будуть приводитися приклади з ppp0, ви ж можете використовувати будь-який інший.
Якщо потрібно відстежити один мережевий інтерфейс, то зробити це ви можете за допомогою опції -i. Не забудьте після її введення вказати найменування інтерфейсу. Ось приклад виконання такої команди:
sudo tcpdump -i ppp0
Зверніть увагу: перед самою командою потрібно вписати «sudo», так як вона вимагає права суперкористувача.
приклад:
Примітка: після натискання 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
Де кольором виділено:
Цей синтаксис має можливість виведення у вікні «Терміналу» без використання додаткових опцій.
Як відомо з таблиці, опція -v дозволяє збільшити кількість інформації. Розберемо на прикладі. Перевіримо той же інтерфейс:
sudo tcpdump -v -i ppp0
приклад:
Тут можна помітити, що з'явилася наступна рядок у висновку:
IP (tos 0x0, ttl 58 , id 30675, offset 0, flags [DF] , proto TCP (6) , length 52
Де кольором виділено:
Також в синтаксис команди ви можете прописати опцію -vv або -vvv, що дозволить ще більше збільшити обсяг інформації, що виводиться на екран.
У таблиці опцій згадувалося про можливість зберігати всі виведені дані в окремий файл, щоб пізніше їх можна було переглянути. За це відповідає опція -w. Користуватися їй досить просто, всього-на-всього вкажіть її в команді, а потім впишіть назву майбутнього файлу з розширенням «.pcap». Розглянемо всі на прикладі:
sudo tcpdump -i ppp0 -w file.pcap
приклад:
Зверніть увагу: під час запису логів в файл на екрані «Терміналу» не відображається ніякої текст.
Коли ви захочете переглянути записаний висновок, необхідно використовувати опцію -r, після якої написати назву раніше записаного файлу. Застосовується вона без інших опцій і фільтрів:
sudo tcpdump -r file.pcap
приклад:
Обидві ці опції відмінно підійдуть в тих випадках, коли необхідно зберегти великі обсяги тексту для подальшого розбору.
З таблиці фільтрів ми знаємо, що dst дозволяє вивести на екран консолі тільки ті пакети, які були отримані адресою, що вказана в синтаксисі команди. Таким чином дуже зручно переглядати пакети, отримані вашим комп'ютером. Для цього в команді потрібно всього лише вказати свій IP-адресу:
sudo tcpdump -i ppp0 ip dst 10.0.6.67
приклад:
Як можна помітити, крім dst, в команді ми прописали також фільтр ip. Іншими словами, ми сказали комп'ютера, щоб при відборі пакетів він звертав увагу на їх IP адреса, а не на інші параметри.
За IP можна відфільтрувати і відправляються пакети. У прикладі наведемо знову наш IP. Тобто зараз ми відслідкуємо які пакети відправляються з нашого комп'ютера на інші адреси. Для цього потрібно виконати наступну команду:
sudo tcpdump -i ppp0 ip src 10.0.6.67
приклад:
Як можна помітити, в синтаксисі команди ми змінили фільтр dst на src, тим самим сказавши машині, щоб вона шукала відправника по IP.
За аналогією з IP в команді ми можемо вказати фільтр host, щоб відсіяти пакети з цікавлять хостом. Тобто в синтаксисі замість IP-адреси відправника / одержувача потрібно буде вказувати його хост. Виглядає це наступним чином:
sudo tcpdump -i ppp0 dst host google-public-dns-a.google.com
приклад:
На зображенні можна побачити, що в «Терміналі» відображаються тільки ті пакети, які були відправлені з нашого 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 (залежить від випадку). Вказуючи фільтри в синтаксисі і розділяючи їх цими оператором, ви «змусите» працювати їх як один. На прикладі це виглядає наступним чином:
sudo tcpdump -i ppp0 ip dst 95.47.144.254 or ip src 95.47.144.254
приклад:
З синтаксису команди видно, що ми хочемо вивести на екран «Терміналу» все пакети, які були відправлені на адресу 95.47.144.254 і пакети, отримані цим же адресою. Також ви можете змінювати деякі змінні в цьому виразі. Наприклад, замість IP вказати HOST або замінити безпосередньо самі адреси.
Фільтр port відмінно підійде в тих випадках, коли потрібно отримати інформацію про пакетах з певним портом. Так, якщо вам потрібно побачити лише відповіді або запити DNS, потрібно вказати порт 53:
sudo tcpdump -vv -i ppp0 port 53
приклад:
Якщо ви хочете переглянути пакети http, потрібно ввести порт 80:
sudo tcpdump -vv -i ppp0 port 80
приклад:
Крім іншого, є можливість відстежити відразу діапазон портів. Для цього застосовується фільтр portrange:
sudo tcpdump portrange 50-80
Як можна помітити, в зв'язці з фільтром portrange не обов'язково вказувати додаткові опції. Достатньо всього лише задати діапазон.
Ви також можете вивести на екран тільки той трафік, який відповідає якомусь протоколу. Для цього потрібно використовувати в якості фільтра найменування цього самого протоколу. Розберемо на прикладі udp:
sudo tcpdump -vvv -i ppp0 udp
приклад:
Як можна побачити на зображенні, після виконання команди в «Терміналі» відобразилися лише пакети з протоколом udp. Відповідно, ви можете здійснити фільтрацію і по іншим, наприклад, arp:
sudo tcpdump -vvv -i ppp0 arp
або tcp:
sudo tcpdump -vvv -i ppp0 tcp
Оператор net допомагає відфільтрувати пакети, беручи за основу позначення їх мережі. Користуватися ним так само просто, як і іншими - потрібно в синтаксисі вказати атрибут net, після чого вписати адресу мережі. Ось приклад такої команди:
sudo tcpdump -i ppp0 net 192.168.1.1
приклад:
Ми не розглянули ще два цікавих фільтра: less і greater. З таблиці з фільтрами ми знаємо, що вони служать для виведення пакетів даних більше (less) або менше (greater) розміру, зазначеного після введення атрибута.
Припустимо ми хочемо стежити лише за пакетами, які не перевищують позначку в 50 біт, тоді команда буде мати наступний вигляд:
sudo tcpdump -i ppp0 less 50
приклад:
Тепер давайте відобразимо в «Терміналі» пакети, розмір яких більше 50 біт:
sudo tcpdump -i ppp0 greater 50
приклад:
Як можна помітити, застосовуються вони однаково, різниця лише в назві фільтра.
Після закінчення статті можна зробити висновок, що команда tcpdump - це відмінний інструмент, за допомогою якого можна відстежити будь-який передається по інтернету пакет даних. Але для цього недостатньо просто ввести саму команду в «Термінал». Домогтися бажаного результату вийде тільки в разі, якщо використовувати всілякі опції і фільтри, а також їх комбінації.