- Что такое tcpdump и для чего он используется
- Установка tcpdump на Linux
- Основы работы с tcpdump
- Как выбрать сетевой интерфейс для анализа
- Фильтрация трафика по IP, порту и протоколу
- Анализ HTTP и HTTPS-трафика
- Запись трафика в файл и последующий анализ
- Как читать вывод tcpdump.
- Альтернативы tcpdump и когда их использовать
- Итоги
Анализ сетевого трафика – ключевой элемент диагностики сетей, поиска уязвимостей и расследования инцидентов информационной безопасности. Один из самых мощных и распространенных инструментов для этой задачи – tcpdump.
Что такое tcpdump и для чего он используется
tcpdump – это консольная утилита для захвата и анализа сетевого трафика. Она показывает, какие пакеты проходят через сетевой интерфейс: откуда они пришли, куда направляются, какой протокол используют и на какой порт обращаются.
С помощью tcpdump можно быстро проверить, есть ли соединение с нужным сервером, доходят ли DNS-запросы, проходит ли трафик через определенный порт, отвечает ли удаленный хост. Утилита полезна при диагностике сетевых проблем, настройке серверов, проверке firewall-правил и расследовании подозрительной активности.
Для полноценной работы с tcpdump нужен доступ к сетевому стеку системы и возможность устанавливать низкоуровневые утилиты. Поэтому такие задачи обычно выполняют на серверах с root-доступом, где пользователь может контролировать сетевые интерфейсы, настраивать фильтрацию и записывать пакеты в файл. Например, виртуальный сервер SpaceWeb предлагает достаточно гибкости для диагностики и мониторинга сетевой активности в реальных условиях эксплуатации сервисов.
Установка tcpdump на Linux
Во многих Linux-дистрибутивах tcpdump уже установлен. Проверить это можно командой:
Если утилиты нет, установите ее через пакетный менеджер вашей системы.
Команда для Debian, Ubuntu и других дистрибутивов на базе Debian:
sudo apt install tcpdump
Для CentOS, RHEL, Fedora и совместимых систем:
Для старых версий CentOS может использоваться yum:
Для Arch Linux:
Основы работы с tcpdump
tcpdump запускают в терминале и обычно используют с правами администратора, потому что для захвата сетевых пакетов нужен доступ к сетевому интерфейсу.
Базовый синтаксис команды выглядит следующим образом:
Например:
покажет весь трафик, который проходит через интерфейс 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-интерфейс или виртуальный интерфейс контейнера.
Посмотреть список доступных интерфейсов можно так:
Пример вывода:
2.any
3.lo
4.docker0
5.wlan0
Чаще всего используются такие интерфейсы:
| Интерфейс | Когда использовать |
| eth0, ens3, enp0s3 | Для анализа проводного подключения или основного сетевого интерфейса сервера |
| wlan0 | Для анализа Wi-Fi-подключения |
| lo | Для проверки локального трафика внутри системы, например обращений к localhost |
| docker0, br-* | Для анализа трафика Docker-контейнеров |
| any | Для просмотра трафика сразу со всех интерфейсов |
Чтобы запустить анализ на конкретном интерфейсе, используйте параметр -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:
Или исключить SSH-трафик, чтобы он не мешал в выводе:
sudo tcpdump -i eth0 not port 22
Анализ HTTP и HTTPS-трафика
С помощью tcpdump можно проверить, проходит ли HTTP- или HTTPS-трафик через сервер, на какие IP-адреса идут запросы и есть ли ответы от удаленной стороны.
HTTP-трафик не шифруется, поэтому в нем можно увидеть больше данных: запросы, заголовки, адреса страниц, иногда параметры и тело запроса.
Например, чтобы посмотреть HTTP-трафик на порту 80:
С HTTPS все иначе. HTTPS-трафик шифруется, поэтому tcpdump не покажет содержимое страниц, логины, пароли, заголовки и тело запроса. Но он все равно полезен: можно проверить, устанавливается ли соединение, на какой IP идет обращение, используется ли порт 443, есть ли ответы от сервера и не обрывается ли TCP-сессия.
Для просмотра HTTPS-трафика выполните:
Например, если сайт не открывается по HTTPS, можно проверить, доходят ли пакеты до сервера:
sudo tcpdump -i eth0 -nn host 203.0.113.10 and port 443
Если пакеты уходят, но ответов нет, проблема может быть на стороне маршрутизации, firewall или удаленного сервера. Если видны ответы с флагом RST, соединение сбрасывается. Если обмен идет, но приложение все равно сообщает об ошибке, причину стоит искать выше сетевого уровня: в TLS, сертификатах, настройках сервера или клиента.
Запись трафика в файл и последующий анализ
tcpdump может не только показывать пакеты в терминале, но и сохранять их в файл. Это удобно, если трафик нужно изучить позже, передать коллеге или открыть в Wireshark.
Для записи используется параметр -w:
Команда начнет захват трафика на интерфейсе eth0 и сохранит его в файл traffic.pcap. В терминале при этом не будет обычного подробного вывода: пакеты будут записываться сразу в файл.
Чтобы не захватывать слишком много данных, лучше сразу добавить фильтр. Например, если хотите записать только HTTPS-трафик, выполните:
А чтобы сохранить трафик конкретного хоста:
Остановить запись можно сочетанием клавиш Ctrl + C. Затем файл можно прочитать с помощью tcpdump:
Как читать вывод 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-ACK, ответ на начало соединения
[.] ACK, подтверждение
[P.] PSH-ACK, передача данных
[F.] FIN-ACK, корректное закрытие соединения
[R] RST, сброс соединения
Например, обычное начало TCP-соединения выглядит примерно так:
server.80 > client.54322: Flags [S.]
client.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 и других соединений.