Перейти до змісту

TCPdump - посібник з аналізу мережевого трафіку

TCPdump - це потужна утиліта командного рядка для захоплення та аналізу мережевих пакетів. Вона дозволяє відслідковувати, налагоджувати та аналізувати мережевий трафік у реальному часі


📋 Зміст

  1. Встановлення
  2. Основні поняття
  3. Швидкий старт
  4. Параметри захоплення
  5. Опції виводу
  6. Фільтрація трафіку
  7. Практичні сценарії
  8. Логічні оператори
  9. Лайфхаки

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

За операційною системою

🔵 Ubuntu

apt-get install tcpdump

🟠 Centos/Alma

dnf install tcpdump

Перевірка встановлення

tcpdump --version

Основні поняття

Що таке пакет?

Пакет - це одиниця даних, яка передається через мережу. Він складається з: - Заголовку - містить інформацію про джерело, призначення, протокол - Корисного навантаження (payload) - власне дані - Трейлеру (checksum) - для перевірки цілісності

Навіщо потрібен TCPDump?

  • 🔍 Налагодження мережі - виявлення проблем з підключенням
  • 📊 Моніторинг трафіку - аналіз типів пакетів
  • 🛡️ Безпека - виявлення підозрілої активності
  • 📈 Оптимізація - аналіз продуктивності мережі

Протоколи, які підтримує TCPDump

  • IP: IPv4, IPv6
  • Транспортні: TCP, UDP
  • ICMP: ping, traceroute
  • Інші: DHCP, DNS, HTTP, FTP та багато інших

Швидкий старт

Найпростіша команда

# Захопити всі пакети з інтерфейсу eth0
tcpdump -i eth0

Результат:

12:34:56.789456 IP 192.168.1.100.52145 > 8.8.8.8.53: 
17945+ [1au] A? google.com. (43)

Зупинення захоплення

Натисніть Ctrl+C щоб завершити


Параметри захоплення

1. Вибір інтерфейсу

Захопити з усіх інтерфейсів

tcpdump -i any

💡 Корисно, коли не знаєте на якому інтерфейсі потрібна активність

Захопити з конкретного інтерфейсу

tcpdump -i eth0

Показати доступні інтерфейси

tcpdump -D

Результат:

1.eth0
2.wlan0
3.lo [Loopback]
4.any
...

2. Контроль кількості пакетів

Захопити тільки перші 10 пакетів

tcpdump -i eth0 -c 10

Команда завершиться автоматично після 10 пакетів

Захопити 100 пакетів

tcpdump -i eth0 -c 100

3. Збереження в файл

Зберегти захоплення

tcpdump -i eth0 -w capture.pcap

📝 Формат PCAP - стандартний для аналізу пакетів

Зберегти перші 50 пакетів

tcpdump -i eth0 -c 50 -w capture.pcap

Читання збереженого файлу

tcpdump -r capture.pcap

Опції виводу

Форматування виводу

1. ASCII формат

tcpdump -i eth0 -A
Показує дані пакета у вигляді текста (якщо можливо)

Приклад:

GET / HTTP/1.1
Host: google.com
User-Agent: curl/7.68.0
...

2. HEX формат

tcpdump -i eth0 -x
Показує дані у шістнадцятковому форматі

Приклад:

0x0000: 4500 0052 3f9e 4000 4006 2b91 c0a8 0164
0x0010: 0808 0808 cb91 0035 8d2d 00a6 0000 0000

3. HEX + ASCII

tcpdump -i eth0 -X
Комбінація обох форматів

4. HEX з заголовками

tcpdump -i eth0 -XX
Включає також Link-layer заголовки

Контроль деталізації

Мінімальна інформація

tcpdump -i eth0 -q
Показує тільки найважливіше

Базова деталізація

tcpdump -i eth0

Розширена інформація

tcpdump -i eth0 -v

Дуже розширена інформація

tcpdump -i eth0 -vv

Максимальна деталізація

tcpdump -i eth0 -vvv

Інші опції

Опція Опис Приклад
-n Не резолвити хостнейми tcpdump -n -i eth0
-nn Не вказувати назви сервісів замість портів tcpdump -nn -i eth0
-t Не показувати час пакета tcpdump -t -i eth0
-e Показати заголовки Ethernet tcpdump -e -i eth0
-S Показати порядкові номери в точному форматі tcpdump -S -i eth0
-p Не використовувати promiscuous режим tcpdump -p -i eth0

Фільтрація трафіку

🎯 Фільтрація дозволяє зосередитися на потрібному трафіку та ігнорувати інше

Фільтрація за протоколами

Захопити тільки TCP пакети

tcpdump -i eth0 tcp

Захопити тільки UDP пакети

tcpdump -i eth0 udp

Захопити тільки ICMP пакети (ping)

tcpdump -i eth0 icmp

Захопити тільки IPv6

tcpdump -i eth0 ipv6

Фільтрація за портами

Трафік на конкретному порту

tcpdump -i eth0 port 80

Захопиться весь трафік на порту 80 (HTTP), незалежно від напрямку

Трафік на кількох портах

tcpdump -i eth0 port 80 or port 443

Трафік в діапазоні портів

tcpdump -i eth0 portrange 6000-6100

Вхідний трафік на порт

tcpdump -i eth0 dst port 22

Только пакети до SSH сервера

Вихідний трафік з порту

tcpdump -i eth0 src port 3306

Тільки пакети з MySQL сервера

Фільтрація за IP адресами

Весь трафік з конкретного хоста

tcpdump -i eth0 host 192.168.1.100

Трафік від конкретного хоста

tcpdump -i eth0 src host 192.168.1.100

Трафік до конкретного хоста

tcpdump -i eth0 dst host 8.8.8.8

Трафік між двома хостами

tcpdump -i eth0 host 192.168.1.100 and host 8.8.8.8

Фільтрація за підмережами

Весь трафік з підмережі

tcpdump -i eth0 net 192.168.1.0/24

Трафік з конкретної підмережі

tcpdump -i eth0 src net 10.0.0.0/8

Трафік до конкретної підмережі

tcpdump -i eth0 dst net 172.16.0.0/12

Фільтрація за типами трафіку

Broadcast пакети (для Ethernet)

tcpdump -i eth0 ether broadcast

Broadcast пакети (для IP)

tcpdump -i eth0 ip broadcast

Multicast пакети

tcpdump -i eth0 multicast

Фільтрація за розміром пакета

Пакети менші за 32 байти

tcpdump -i eth0 less 32

Пакети більші за 1000 байтів

tcpdump -i eth0 greater 1000

Пакети розміром рівно 64 байти

tcpdump -i eth0 "ip[2:2] == 64"

Практичні сценарії

Сценарій 1: Налагодження веб-сервера

Завдання: Знайти всі HTTP запити до вашого вебсервера на порту 8080

tcpdump -i eth0 -n -A tcp port 8080

Що буде видно: - Всі TCP пакети на порту 8080 - -n — без розв'язування DNS (швидше) - -A — у текстовому форматі щоб бачити HTTP запити

Приклад виводу:

GET /api/users HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
...


Сценарій 2: Моніторинг SSH підключень

Завдання: Перевірити хто намагається підключитися по SSH

tcpdump -i eth0 -nn dst port 22

Що буде видно: - Весь трафік до SSH сервера (порт 22) - -nn — показує реальні IP адреси і портів без розв'язування

Як читати:

12:34:56.789456 IP 203.0.113.50.53241 > 192.168.1.1.22: Flags [S], seq 1234567890
- 203.0.113.50 — клієнт підключається - 192.168.1.1.22 — ваш SSH сервер


Сценарій 3: Аналіз DNS запитів

Завдання: Побачити які домени запитуються у вашій мережі

tcpdump -i eth0 -n udp port 53

Що буде видно: - Всі DNS запити (на порту 53) - Назви доменів що запитуються

Приклад:

12:34:56.789456 IP 192.168.1.100.45123 > 8.8.8.8.53: 
45678+ A? google.com. (27)


Сценарій 4: Захоплення трафіку конкретного IP

Завдання: Аналізувати весь трафік од конкретного комп'ютера

tcpdump -i eth0 -n host 192.168.1.100 -w traffic.pcap

Що буде видно: - Все що робить цей комп'ютер в мережі - Результат збережеться в файл traffic.pcap

Потім аналізувати:

tcpdump -r traffic.pcap -vv


Сценарій 5: Перевірка подвійного шифрування

Завдання: Переконатися що HTTPS тільки шифрований трафік

tcpdump -i eth0 -n -A tcp port 443

Що чекати: - Трафік має бути нечитаємим (бінарний/криптографічний) - Не мають бути видимі дані HTTP

Якщо видно HTTP текст - це проблема! 🚨


Сценарій 6: Знаходження повільної мережі

Завдання: Знайти великі передачі даних

tcpdump -i eth0 -n "ip[2:2] > 1400"

Що буде видно: - Тільки пакети більші за 1400 байтів - Може вказати на видалення файлів або хідання


Логічні оператори

💡 Комбінюйте умови для більш точної фільтрації

Оператор AND

Синтаксис: and або &&

# TCP трафік на порту 80 з конкретного хоста
tcpdump -i eth0 host 192.168.1.100 and tcp port 80
# UDP пакети на DNS порту з конкретної підмережі
tcpdump -i eth0 src net 192.168.1.0/24 and udp port 53

Оператор OR

Синтаксис: or або ||

# Трафік на HTTP або HTTPS портах
tcpdump -i eth0 tcp port 80 or tcp port 443
# SSH або RDP підключення
tcpdump -i eth0 tcp port 22 or tcp port 3389

Оператор NOT (EXCEPT)

Синтаксис: not або !

# Весь трафік крім ICMP (ping)
tcpdump -i eth0 not icmp
# Весь TCP трафік крім SSH
tcpdump -i eth0 tcp and not port 22

Комбіновані вирази

# TCP на портах 80 або 443, але не від конкретного IP
tcpdump -i eth0 (tcp port 80 or tcp port 443) and not src 192.168.1.200
# HTTPS трафік до конкретної підмережі, крім multicast
tcpdump -i eth0 tcp port 443 and dst net 10.0.0.0/8 and not multicast

Lifehacks

💾 Запис та аналіз в реальному часі

# Запис в файл і одночасно показ на екрані
tcpdump -i eth0 -U -w - | tee capture.pcap | tcpdump -r - -v

🔄 Фільтрування після захоплення

Крок 1: Запишіть весь трафік

tcpdump -i eth0 -w full-capture.pcap

Крок 2: Потім фільтруйте при читанні

tcpdump -r full-capture.pcap tcp port 443

🎯 Екстра деталізація для налагодження

# Максимальна інформація
tcpdump -i eth0 -vvv -A -e -s 0

Що означає: - -vvv — максимум деталізації - -A — ASCII формат - -e — Ethernet заголовки - -s 0 — захопити весь пакет (не обрізувати)

📊 Статистика трафіку

# Збережіть пакети в файл
tcpdump -i eth0 -c 10000 -w stats.pcap

# Потім аналізуйте (потрібна утиліта tshark)
tshark -r stats.pcap -q -z io,phs

🛡️ Виявлення сканування портів

# SYN флаги без завершення з'єднання
tcpdump -i eth0 "tcp[tcpflags] & tcp-syn != 0" -n

🔍 Перевірка MTU проблем

# Пакети з Don't Fragment флагом
tcpdump -i eth0 "ip[6] & 0x40 != 0" -n

⏱️ Моніторинг в реальному часі з повільним оновленням

# Захопити і показати медленно для читання
while true; do
  tcpdump -i eth0 -c 1 -n
  sleep 1
done

🎓 Навчання та демонстрація

# Простий HTTP запит для роз'яснення
tcpdump -i eth0 -A tcp port 80

# Потім в іншому терміналі:
curl http://example.com

Усунення неполадок

❌ Помилка: "Permission denied"

Причина: Недостатньо прав доступу

Рішення:

# Запустіть з sudo
sudo tcpdump -i eth0

# Або додайте користувача до групи pcap
sudo usermod -a -G pcap $USER
# Потім перезавантажте сеанс

❌ Помилка: "No such device"

Причина: Неправильна назва інтерфейсу

Рішення:

# Знайдіть правильну назву
tcpdump -D

# Потім використовуйте правильну
tcpdump -i wlan0

❌ Помилка: "Device not up"

Причина: Мережевий інтерфейс вимкнений

Рішення:

# Перевірте статус
ip link show

# Увімкніть інтерфейс
sudo ip link set eth0 up

❌ Нема даних/пакетів

Можливі причини: 1. Невірна фільтрація — в даний час немає трафіку на цьому фільтрі 2. Вибрано неправильний інтерфейс — перевірте tcpdump -D 3. Firewall блокує — перевірте правила

Рішення:

# Спробуйте захопити весь трафік
tcpdump -i any -c 100

# Або збільшіть тайм-аут
sudo timeout 30 tcpdump -i eth0


Шпаргалка для швидкого використання

# 1. Базове захоплення
sudo tcpdump -i eth0

# 2. Зберегти в файл
sudo tcpdump -i eth0 -w capture.pcap

# 3. Прочитати файл
tcpdump -r capture.pcap

# 4. HTTP трафік
sudo tcpdump -i eth0 -A tcp port 80

# 5. DNS запити
sudo tcpdump -i eth0 -n udp port 53

# 6. SSH підключення
sudo tcpdump -i eth0 -n dst port 22

# 7. Конкретний IP
sudo tcpdump -i eth0 host 192.168.1.100

# 8. Конкретна підмережа
sudo tcpdump -i eth0 net 192.168.1.0/24

# 9. Без ICMP
sudo tcpdump -i eth0 not icmp

# 10. Максимальна деталізація
sudo tcpdump -i eth0 -vvv -A -e -s 0