TCPDUMP — это инструмент, который используется для анализа пакетов TCP/IP. Впервые он был выпущен в 1988 году и с тех пор стал очень мощным и широко используемым анализатором трафика в Linux, а также во многих других операционных системах.

TCPDUMP позволяет прослушивать весь входящий и исходящий трафик со всех интерфейсов. Что еще более важно, он может фильтровать трафик по интерфейсу, хосту, IP адресу назначения или  источника, типу трафика и многим другим критериям. Во время устранения неполадок это помогает изолировать только те пакеты, которые имеют отношение к вам.

В этом посте мы рассмотрим список очень распространенных опций tcpdump. Это даст вам хорошее представление о том, какую помощь вы можете получить от использования этого инструмента.

В большинстве случаев, чтобы использовать tcpdump, вы должны быть пользователем root или запускать команды с ключевым словом «sudo». Это связано с тем, что механизм захвата пакетов требует повышенных привилегий. Итак, если вы запустите команду tcpdump и не получите результатов, вам может потребоваться запустить ее как суперпользователь. Фактически tcpdump уведомит вас о необходимости повышенных привилегий.

Трафик на всех интерфейсах

Эта команда предоставит вам весь входящий и исходящий трафик на всех интерфейсах:

sudo tcpdump

На экране будет отображаться информация о пакетах, пока вы не нажмете Ctrl+C. В качестве альтернативы вы можете использовать опцию ‘-c’, чтобы выгрузить определенное количество пакетов (например, tcpdump -c 10).
Давайте посмотрим на один из пакетов выше, чтобы понять, что представляет собой каждое поле:

11: 16: 20.681353: — отметка времени пакета;
System.44956: — пакет сгенерирован операционной сиситемой и порт источника;
192.168.6.114.ssh: — IP-адрес и порт назначения (ssh означает порт 22);
Flags [S]: — любые флаги TCP;
seq 3135937357: — начальный порядковый номер TCP-пакета;
win 64240: — окно TCP;
length 0: — длина TCP-пакета (в байтах) без заголовков.

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

Конкретный интерфейс

tcpdump -i enp3s0

Это команда показывает весь входящий и исходящий трафик для интерфейса «enp3s0»:

tcpdump host 8.8.8.8
tcpdump src host 8.8.8.8
tcpdump dst host 8.8.8.8

Это команда показывает весь входящий и исходящий трафик сязанный с хостом 8.8.8.8, весь трафик, исходящий от 8.8.8.8, и весь трафик, который идет к 8.8.8.8.

Конкретный порт

tcpdump port 22
tcpdump dst port 22
tcpdump src port 22
tcpdump portrange 22-30

Удобочитаемый формат

tcpdump -A

Эта команда показывает все пакеты в формате ASCII. Таким образом, вы можете по возможности прочитать фактическую полезную нагрузку пакетов.

Зашифрованный / незашифрованный трафик

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

Войдите на хост Linux с двумя разными сеансами
В одном сеансе выполните команду:

tcpdump port 80 -A

В другом сеансе запустите:

curl google.com

Вы увидите, что некоторые результаты выглядят так:

Как видите, необработанный вывод незашифрованной страницы google.com может отображаться читаемо. Следовательно, содержимое любого незашифрованного сообщения может быть перехвачено.

Посмотрим, как выглядит шифрованное сообщение. Сделаем следующее:

Войдите на хост Linux с двумя разными сеансами
В одном сеансе выполните команду:

tcpdump port 443 -A

В другом сеансе выполните команду:

curl https://google.com

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

Это нечитаемый зашифрованный контент для связи по протоколу HTTPS.

Более подробное описание tspdump на странице проекта TCPDUMP