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 Нумерує кожен пакет у виводі (зручно для підрахунку втрат).

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