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