tcpdump — це найпотужніший інструмент командного рядка для перехоплення та аналізу мережевих пакетів у Linux, macOS та Unix-системах. У цьому посібнику зібрані найнеобхідніші команди та фільтри, які стануть вам у пригоді.
1. Базова Анатомія Команди#
Перш ніж перейти до прикладів, запам’ятайте базовий синтаксис:
1
|
tcpdump [опції] [фільтр]
|
2. Топ-5 Найважливіших Опцій (Майже завжди поруч)#
Ці прапорці варто використовувати майже завжди, щоб не перевантажити систему та отримати читабельний вивід.
1
2
3
4
5
6
7
|
# -i [інтерфейс] : Вказати мережевий інтерфейс (наприклад, eth0, enp0s3)
# -n : НЕ перетворювати IP-адреси в імена хостів (працює швидше)
# -nn : НЕ перетворювати IP-адреси та номери портів у назви сервісів
# -X : Показувати вміст пакета в HEX та ASCII
# -c [число] : Захопити тільки N пакетів і вийти
# -w [файл] : Записати результат у файл (для Wireshark)
# -r [файл] : Прочитати pcap-файл
|
3. Вибір Інтерфейсів#
Куди саме дивитися?
1
2
3
4
5
6
7
8
9
10
11
|
# Вивести список доступних інтерфейсів
tcpdump -D
# Слухати трафік на будь-якому доступному інтерфейсі
tcpdump -i any
# Слухати на конкретному дротовому інтерфейсі
tcpdump -i eth0
# Слухати на loopback (localhost)
tcpdump -i lo
|
4. Фільтрація за Хостами (IP-адресами)#
Основа аналізу — пошук пакетів між конкретними машинами.
1
2
3
4
5
6
7
8
9
10
11
|
# Трафік ВІД конкретного хоста
tcpdump -i eth0 -nn src host 192.168.1.10
# Трафік ДО конкретного хоста
tcpdump -i eth0 -nn dst host 192.168.1.20
# Весь трафік, пов’язаний з цим хостом (вхідний + вихідний)
tcpdump -i eth0 -nn host 192.168.1.15
# Виключити хост із прослуховування
tcpdump -i eth0 -nn not host 192.168.1.1
|
5. Фільтрація за Портами та Протоколами#
Звужуємо пошук до конкретних сервісів.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# Тільки HTTP-трафік (порт 80)
tcpdump -i eth0 -nn port 80
# Тільки HTTPS-трафік (порт 443)
tcpdump -i eth0 -nn port 443
# Діапазон портів (наприклад, 20-100)
tcpdump -i eth0 -nn portrange 20-100
# Епізодичні порти (Ephemeral Ports) до конкретних хостів
# Корисно, коли клієнт встановлює багато зʼєднань з динамічних портів до балансувальника
tcpdump -n 'src portrange 32768-60999 and (dst 192.168.25.238 or dst 192.168.25.239)'
# Трафік з конкретного хоста на конкретний порт (SSH)
tcpdump -i eth0 -nn src host 10.0.0.5 and dst port 22
# Вихідний трафік MySQL
tcpdump -i eth0 -nn dst port 3306
# Дивитись тільки UDP або TCP пакети
tcpdump -i eth0 -nn udp
tcpdump -i eth0 -nn tcp
|
6. Просунуті Логічні Оператори (and, or, not)#
Комбінуємо умови для точкового пошуку.
1
2
3
4
5
6
7
8
|
# HTTP або HTTPS трафік
tcpdump -i eth0 -nn 'port 80 or port 443'
# Весь трафік до хоста, КРІМ SSH
tcpdump -i eth0 -nn dst host 192.168.1.10 and not port 22
# Пакети ICMP (ping) від хоста A до хоста B
tcpdump -i eth0 -nn icmp and src host 192.168.1.10 and dst host 8.8.8.8
|
7. Робота з Прапорами TCP (SYN, ACK, RST)#
Незамінний інструмент для налагодження з’єднань та пошуку скинутих сесій.
1
2
3
4
5
6
7
8
9
10
11
|
# Тільки SYN-пакети (початок з'єднання)
tcpdump -i eth0 -nn 'tcp[tcpflags] == tcp-syn'
# SYN + ACK (другий крок handshake)
tcpdump -i eth0 -nn 'tcp[tcpflags] == tcp-syn|tcp-ack'
# RST-пакети (розрив з'єднання з помилкою)
tcpdump -i eth0 -nn 'tcp[tcpflags] == tcp-rst'
# Пакети з прапором PSH (Push — дані передаються додатку негайно)
tcpdump -i eth0 -nn 'tcp[tcpflags] == tcp-push'
|
8. Пошук Корисного Навантаження (Payload) — Як grep для пакетів#
Шукаємо конкретні рядки всередині трафіку.
1
2
3
4
5
6
|
# Шукаємо пакети, що містять слово "password" (в HEX або ASCII)
tcpdump -i eth0 -nn -A | grep -i "password"
# Шукаємо GET-запити HTTP
tcpdump -i eth0 -nn -A 'tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
# Примітка: 0x47455420 — це "GET " у шістнадцятковому форматі
|
9. Збереження та Читання Дампів (pcap-файли)#
Для глибокого аналізу у Wireshark або відкладеного перегляду.
1
2
3
4
5
6
7
8
9
10
11
|
# Записати весь трафік на порту 80 у файл http_traffic.pcap
tcpdump -i eth0 -nn port 80 -w http_traffic.pcap
# Обмежити розмір одного файлу (100 МБ), створити ротацію (файл1, файл2...)
tcpdump -i eth0 -nn -w capture.pcap -C 100 -W 5
# Прочитати збережений дамп і показати його на екрані
tcpdump -nn -r http_traffic.pcap
# Прочитати дамп, фільтруючи тільки DNS-запити
tcpdump -nn -r capture.pcap port 53
|
10. Форматування Виводу (Verbosity)#
Контролюємо, наскільки детальним буде вивід.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# Стандартний вивід (мінімальний)
tcpdump -i eth0 -nn
# Troхи більше деталей (+ TTL, ID, зміщення)
tcpdump -i eth0 -nn -v
# Ще більше (деталі ICMP, NFS, SMB)
tcpdump -i eth0 -nn -vv
# Максимальна кількість деталей
tcpdump -i eth0 -nn -vvv
# Показувати MAC-адреси (корисно на L2 рівні)
tcpdump -i eth0 -nn -e
|
11. Продвинута Практична Шпаргалка (Рецепти)#
Готові скрипти для щоденних задач.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 1. Дивимось весь трафік, що генерується системою на зовнішній світ,
# окрім SSH (щоб не засмічувати екран, якщо підключені віддалено)
tcpdump -i eth0 -nn not port 22 and src host $(hostname -I | awk '{print $1}')
# 2. Ловимо всі DNS-запити та відповіді
tcpdump -i eth0 -nn -v port 53
# 3. Моніторимо ARP-активність у мережі
tcpdump -i eth0 -nn arp
# 4. Аналізуємо DHCP (запит оренди IP)
tcpdump -i eth0 -nn -v 'port 67 or port 68'
# 5. Підраховуємо кількість унікальних IP, що підключаються до порту 443 (легка DDoS діагностика)
tcpdump -i eth0 -nn dst port 443 | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -nr
|
12. Міні-таблиця Бойових Прапорів#
| Опція |
Приклад використання |
Розшифровка та ефект |
-A |
tcpdump -i eth0 -A |
Виводить корисне навантаження пакету в ASCII. Ідеально бачити текст HTTP-запитів. |
-x |
tcpdump -i eth0 -x |
Виводить заголовки та дані в Hex форматі (без розшифровки тексту). |
-XX |
tcpdump -i eth0 -XX |
Найповніший дамп: Hex + ASCII, включаючи заголовки канального рівня (Ethernet). |
-q |
tcpdump -i eth0 -q |
«Тихий» режим. Прибирає деталізацію, показує тільки базову інформацію про пакет. |
-s 0 |
tcpdump -i eth0 -s 0 |
Snap Length. Обов’язково до використання! Захоплює весь пакет цілком, а не урізає до 68/96 байт. |
-l |
tcpdump -i eth0 -l | grep GET |
Вмикає лінійну буферизацію. Дозволяє одразу бачити результат під час пайпу в grep. |
-e |
tcpdump -i eth0 -e |
Друкує MAC-адреси відправника та одержувача в заголовку кожного пакета. |
-c N |
tcpdump -i eth0 -c 50 |
Автоматично зупиняє захоплення після отримання N пакетів (тут: 50). |
--number |
tcpdump -i eth0 --number |
Нумерує кожен пакет у виводі (зручно для підрахунку втрат). |
Використовуйте цю шпаргалку відповідально. Не забувайте, що несанкціонований перехоплення чужого трафіку може бути незаконним.