Задать вопрос
Все статьи / Полезная информация / Как анализировать сетевой трафик с помощью tcpdump
Найти результаты:
Период:
с:
 
по:
Помощь в поиске

Помощь в поиске

apple banana
Найти записи, которые содержат хотя бы одно из двух слов.

+apple +juice
Найти записи, которые содержат оба слова.

+apple macintosh
Найти записи, которые содержат слово 'apple', но положение записей выше, если они также содержат 'macintosh'.

+apple -macintosh
Найти записи, которые содержат слово 'apple', но не 'macintosh'.

+apple ~macintosh
Найти записи, которые содержат слово 'apple', но если запись также содержит слово 'macintosh', rate it lower than if row does not. Это более "мягкий" чем поиск '+apple -macintosh', для которого наличие 'macintosh' вызывает что записи не будут возвращены вовсе.

+apple +(>turnover <strudel)
Найти записи, которые содержат слова 'apple' и 'turnover', или 'apple' и 'strudel' (в любом порядке), но ранг 'apple turnover' выше чем 'apple strudel'.

apple*
Найти записи, которые содержат такие слова как 'apple', 'apples', 'applesauce', или 'applet'.

"some words"
Найти записи, которые содержат точную фразу 'some words' (например записи содержащие 'some words of wisdom', но не "some noise words").

Как анализировать сетевой трафик с помощью tcpdump

Анализ сетевого трафика – ключевой элемент диагностики сетей, поиска уязвимостей и расследования инцидентов информационной безопасности. Один из самых мощных и распространенных инструментов для этой задачи – tcpdump. 

Что такое tcpdump и для чего он используется

tcpdump – это консольная утилита для захвата и анализа сетевого трафика. Она показывает, какие пакеты проходят через сетевой интерфейс: откуда они пришли, куда направляются, какой протокол используют и на какой порт обращаются.

С помощью tcpdump можно быстро проверить, есть ли соединение с нужным сервером, доходят ли DNS-запросы, проходит ли трафик через определенный порт, отвечает ли удаленный хост. Утилита полезна при диагностике сетевых проблем, настройке серверов, проверке firewall-правил и расследовании подозрительной активности.

Для полноценной работы с tcpdump нужен доступ к сетевому стеку системы и возможность устанавливать низкоуровневые утилиты. Поэтому такие задачи обычно выполняют на серверах с root-доступом, где пользователь может контролировать сетевые интерфейсы, настраивать фильтрацию и записывать пакеты в файл. Например, виртуальный сервер SpaceWeb предлагает достаточно гибкости для диагностики и мониторинга сетевой активности в реальных условиях эксплуатации сервисов.

Установка tcpdump на Linux

Во многих Linux-дистрибутивах tcpdump уже установлен. Проверить это можно командой:

tcpdump --version

Если утилиты нет, установите ее через пакетный менеджер вашей системы.

Команда для Debian, Ubuntu и других дистрибутивов на базе Debian:

sudo apt update
sudo apt install tcpdump

Для CentOS, RHEL, Fedora и совместимых систем:

sudo dnf install tcpdump

Для старых версий CentOS может использоваться yum:

sudo yum install tcpdump

Для Arch Linux:

sudo pacman -S tcpdump

Основы работы с tcpdump

tcpdump запускают в терминале и обычно используют с правами администратора, потому что для захвата сетевых пакетов нужен доступ к сетевому интерфейсу.

Базовый синтаксис команды выглядит следующим образом:

sudo tcpdump [параметры] [фильтр]

Например:

sudo tcpdump -i eth0

покажет весь трафик, который проходит через интерфейс eth0.

Чтобы остановить захват, нажмите сочетание клавиш Ctrl + C. 

После остановки tcpdump покажет краткую статистику: сколько пакетов было захвачено, сколько обработано фильтром и сколько могло быть потеряно системой.

Базовые команды tcpdump:

Команда Что делает
sudo tcpdump Запускает захват трафика на интерфейсе по умолчанию
sudo tcpdump -D Показывает список доступных сетевых интерфейсов
sudo tcpdump -i eth0 Захватывает трафик на интерфейсе eth0
sudo tcpdump -i any Показывает трафик со всех доступных интерфейсов
sudo tcpdump -n Отключает преобразование IP-адресов в имена хостов
sudo tcpdump -nn Отключает преобразование IP-адресов и портов в имена
sudo tcpdump -c 10 Захватывает только 10 пакетов и завершает работу
sudo tcpdump -i eth0 port 80 Показывает трафик на порту 80
sudo tcpdump -i eth0 host 192.168.1.10 Показывает трафик, связанный с IP-адресом 192.168.1.10
sudo tcpdump -i eth0 -w traffic.pcap Записывает трафик в файл traffic.pcap

Как выбрать сетевой интерфейс для анализа

Чтобы tcpdump показывал нужный трафик, нужно указать сетевой интерфейс. Это может быть Ethernet-интерфейс, Wi-Fi, VPN, loopback-интерфейс или виртуальный интерфейс контейнера.

Посмотреть список доступных интерфейсов можно так:

sudo tcpdump -D

Пример вывода:

1.eth0
2.any
3.lo
4.docker0
5.wlan0

Чаще всего используются такие интерфейсы:

Интерфейс Когда использовать
eth0, ens3, enp0s3 Для анализа проводного подключения или основного сетевого интерфейса сервера
wlan0 Для анализа Wi-Fi-подключения
lo Для проверки локального трафика внутри системы, например обращений к localhost
docker0, br-* Для анализа трафика Docker-контейнеров
any Для просмотра трафика сразу со всех интерфейсов

Чтобы запустить анализ на конкретном интерфейсе, используйте параметр -i:

sudo tcpdump -i eth0

Если вы не уверены, какой интерфейс нужен, можно начать с any:

sudo tcpdump -i any

Так tcpdump покажет трафик со всех интерфейсов.

Фильтрация трафика по IP, порту и протоколу

Без фильтров tcpdump показывает слишком много пакетов, особенно на активном сервере. Поэтому чаще всего трафик ограничивают по IP-адресу, порту или протоколу.

Фильтр Пример команды Что показывает
По IP-адресу sudo tcpdump -i eth0 host 192.168.1.10 Весь трафик от указанного IP или к нему
По отправителю sudo tcpdump -i eth0 src 192.168.1.10 Только пакеты, отправленные с этого IP
По получателю sudo tcpdump -i eth0 dst 192.168.1.10 Только пакеты, направленные на этот IP
По порту sudo tcpdump -i eth0 port 443 Весь трафик через порт 443
По исходному порту sudo tcpdump -i eth0 src port 53 Пакеты, отправленные с порта 53
По порту назначения sudo tcpdump -i eth0 dst port 22 Пакеты, направленные на порт 22
По протоколу TCP sudo tcpdump -i eth0 tcp Только TCP-трафик
По протоколу UDP sudo tcpdump -i eth0 udp Только UDP-трафик
По ICMP sudo tcpdump -i eth0 icmp Ping-запросы и другие ICMP-пакеты

Фильтры можно объединять с помощью операторов and, or и not.

Например, посмотреть TCP-трафик от конкретного IP на порт 443:

sudo tcpdump -i eth0 tcp and host 192.168.1.10 and port 443

Или исключить SSH-трафик, чтобы он не мешал в выводе:

sudo tcpdump -i eth0 not port 22

Анализ HTTP и HTTPS-трафика

С помощью tcpdump можно проверить, проходит ли HTTP- или HTTPS-трафик через сервер, на какие IP-адреса идут запросы и есть ли ответы от удаленной стороны.

HTTP-трафик не шифруется, поэтому в нем можно увидеть больше данных: запросы, заголовки, адреса страниц, иногда параметры и тело запроса.

Например, чтобы посмотреть HTTP-трафик на порту 80:

sudo tcpdump -i eth0 -nn port 80

С HTTPS все иначе. HTTPS-трафик шифруется, поэтому tcpdump не покажет содержимое страниц, логины, пароли, заголовки и тело запроса. Но он все равно полезен: можно проверить, устанавливается ли соединение, на какой IP идет обращение, используется ли порт 443, есть ли ответы от сервера и не обрывается ли TCP-сессия.

Для просмотра HTTPS-трафика выполните:

sudo tcpdump -i eth0 -nn port 443

Например, если сайт не открывается по HTTPS, можно проверить, доходят ли пакеты до сервера:

sudo tcpdump -i eth0 -nn host 203.0.113.10 and port 443

Если пакеты уходят, но ответов нет, проблема может быть на стороне маршрутизации, firewall или удаленного сервера. Если видны ответы с флагом RST, соединение сбрасывается. Если обмен идет, но приложение все равно сообщает об ошибке, причину стоит искать выше сетевого уровня: в TLS, сертификатах, настройках сервера или клиента.

Запись трафика в файл и последующий анализ

tcpdump может не только показывать пакеты в терминале, но и сохранять их в файл. Это удобно, если трафик нужно изучить позже, передать коллеге или открыть в Wireshark.

Для записи используется параметр -w:

sudo tcpdump -i eth0 -w traffic.pcap

Команда начнет захват трафика на интерфейсе eth0 и сохранит его в файл traffic.pcap. В терминале при этом не будет обычного подробного вывода: пакеты будут записываться сразу в файл.

Чтобы не захватывать слишком много данных, лучше сразу добавить фильтр. Например, если хотите записать только HTTPS-трафик, выполните:

sudo tcpdump -i eth0 -nn port 443 -w https-traffic.pcap

А чтобы сохранить трафик конкретного хоста:

sudo tcpdump -i eth0 -nn host 192.168.1.10 -w host-traffic.pcap

Остановить запись можно сочетанием клавиш Ctrl + C. Затем файл можно прочитать с помощью tcpdump:

tcpdump -r traffic.pcap

Как читать вывод tcpdump.

Вывод tcpdump читается по одной схеме: время, протокол, источник, получатель и краткое описание пакета.

Пример:

12:45:18.123456 IP 192.168.1.10.54322 > 93.184.216.34.80: Flags [S], seq 123456789, win 64240, length 0

Разберем его по частям:

  • 12:45:18.123456 – время захвата пакета.
  • IP – протокол сетевого уровня. 
  • 192.168.1.10.54322 – источник пакета. В этом примере IP-адрес 192.168.1.10 отправляет пакет с порта 54322.
  • > – направление движения пакета.
  • 93.184.216.34.80 – получатель пакета. Пакет направлен на IP-адрес 93.184.216.34 и порт 80.
  • Flags [S] – TCP-флаг. В примере указан S, то есть SYN-пакет. Он используется при начале TCP-соединения.
  • seq 123456789 – номер последовательности TCP-пакета.
  • win 64240 – размер TCP-окна. Он показывает, сколько данных сторона готова принять.
  • length 0 – размер полезных данных в пакете. Значение 0 часто встречается у служебных TCP-пакетов, например при установке соединения.

Часто в выводе можно увидеть следующие TCP-флаги:

[S]     SYN, начало соединения
[S.]    SYN-ACK, ответ на начало соединения
[.]     ACK, подтверждение
[P.]    PSH-ACK, передача данных
[F.]    FIN-ACK, корректное закрытие соединения
[R]     RST, сброс соединения

Например, обычное начало TCP-соединения выглядит примерно так:

client.54322 > server.80: Flags [S]
server.80 > client.54322: Flags [S.]
clien
t.54322 > server.80: Flags [.]

Оно означает, что клиент отправил запрос на соединение, сервер ответил, а клиент подтвердил ответ.

Если вы видите много пакетов с флагом [R], соединение сбрасывается. Причина может быть в firewall, закрытом порте, настройках сервиса или приложении, которое принудительно разрывает соединение.

Альтернативы tcpdump и когда их использовать

tcpdump удобен для быстрой диагностики в терминале, но не всегда подходит для глубокого анализа. В некоторых случаях лучше использовать другие инструменты:

  • Wireshark – графический анализатор сетевого трафика. Его удобно использовать, когда нужно подробно разобрать pcap-файл, посмотреть структуру пакетов, отфильтровать запросы через интерфейс и изучить отдельные поля протоколов. 
  • tshark – консольная версия Wireshark. Подходит для серверов без графического интерфейса, автоматизации и скриптов. Его используют, когда возможностей tcpdump уже мало, но графический интерфейс не нужен.
  • ngrep – инструмент для поиска текста в сетевом трафике. Он полезен при анализе незашифрованных протоколов, например HTTP. С его помощью можно искать строки, заголовки, методы запросов и другие текстовые данные.
  • ss – утилита для просмотра сетевых соединений и открытых портов. Она не анализирует пакеты, но помогает быстро понять, какие соединения активны, какие порты слушает сервер и какие процессы их используют.

На практике tcpdump чаще всего используют как первый инструмент диагностики. Если нужно быстро проверить, идут ли пакеты, достаточно tcpdump. Если нужно детально разобрать содержимое, удобнее сохранить трафик в .pcap и открыть его в Wireshark.

Итоги

Таким образом, tcpdump помогает быстро проверить, что происходит с сетевым трафиком: доходят ли пакеты до сервера, есть ли ответы, какие IP-адреса и порты участвуют в соединении. Он полезен при диагностике сетевых ошибок, проверке firewall-правил, анализе DNS, HTTP, HTTPS, SSH и других соединений.

Предыдущая статья
Интеграция бэкенд приложения с облачной инфраструктурой
Следующая статья
Как заблокировать доступ ботов к сайту с помощью .htaccess