Якщо вам необхідно проаналізувати або перехопити мережеві пакети в 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. У статті будуть наводитися приклади з 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
Де кольором виділено:
синім | час отримання пакета |
помаранчевим | версія протоколу |
зеленим | адреса відправника |
фіолетовим | адреса одержувача |
сірим | додаткова інформація про tcp |
червоним | Розмір пакета (відображається в байтах) |
Цей синтаксис має можливість виведення у вікні «терміналу» без використання додаткових опцій.
Захоплення трафіку з опцією-v
Як відомо з таблиці, опція -v дозволяє збільшити кількість інформації. Розберемо на прикладі. Перевіримо той же інтерфейс:
Sudo tcpdump -v -i ppp0
Приклад:
Тут можна помітити, що з'явився наступний рядок у виведенні:
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
Приклад:
Зверніть увагу: під час запису логів в файл на екрані «терміналу» не відображається ніякої текст.
Коли ви хочете переглянути записаний вихід, вам потрібно скористатися опцією -r , після якої написати назву раніше записаного файлу. Застосовується вона без інших опцій і фільтрів:
Sudo tcpdump -r file.pcap
Приклад:
Обидві ці опції відмінно підійдуть в тих випадках, коли необхідно зберегти великі обсяги тексту для подальшого розбору.
Фільтрація по IP
З таблиці фільтрів ми знаємо, що 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.
Фільтрація по HOST
За аналогією з 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
Якщо у вас з'являється необхідність використовувати відразу кілька фільтрів в одній команді, то для цього потрібно застосовувати фільтр and або or (залежить від випадку). Вказуючи фільтри в синтаксисі та розділяючи їх цими операторами, ви &171;змусите&187; працювати їх як один. На прикладі це виглядає наступним чином:
Sudo tcpdump -i ppp0 ip dst 95.47.144.254 or ip src 95.47.144.254
Приклад:
З синтаксису команди видно, що ми хочемо вивести на екран «терміналу» всі пакети, які були відправлені на адресу 95.47.144.254 і пакети, отримані цією ж адресою. Також ви можете змінювати деякі змінні в цьому виразі. Наприклад, замість IP вказати HOST або замінити безпосередньо самі адреси.
Фільтр port і portrange
Фільтр 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 допомагає відфільтрувати пакети, беручи за основу позначення їх мережі. Користуватися ним так само просто — як і іншими-потрібно в синтаксисі вказати атрибут 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 - це відмінний інструмент, за допомогою якого можна відстежити будь-який переданий по інтернету пакет даних. Але для цього недостатньо просто ввести саму команду в «Термінал» . Домогтися бажаного результату вийде тільки в разі, якщо використовувати всілякі опції і фільтри, а також їх комбінації.