Утилита tcpdump является весьма мощным инструментом, предназначенным для перехвата и анализа различных сетевых пакетов. Такая команда весьма популярна среди пользователей операционной системы «Линукс».
С помощью tcpdump появляется возможность просматривать как входящие, так и исходящие из требуемого интерфейса пакеты. Пользоваться утилитой нужно через командную строку.
Стоит отметить, что для анализа сетевого потока нередко применяется программа Wirshark. Она представлена в виде графической утилиты, но не дает возможности работать с использованием терминалов.
Такой функционал имеется именно у утилиты tcpdump. Она такой же, как и Wireshark, обладает всеми требуемыми возможностями для проведения анализа пакетов, сохранения всех перехваченных пакетов в отдельном файле. Полученные данные можно в последующем обрабатывать с помощью графической утилиты Wireshark.
Установка tcpdump
Если изучить многие дистрибутивы, можно увидеть, что команда tcpdump в большинстве случаев установлена «по умолчанию». Если в используемом вами дистрибутиве нет такой опции, ее можно установить путем использования официальных репозиториев.
Чаще всего для установки используются репозитории Ubuntu/Debian или Fedora/Red Hat/CentOS. Для осуществления поставленной задачи потребуется ввести в команд.
Для Debian.
Обновляем репозиторий.
# apt-get update
# apt-get install tcpdump
Для CentOs 7:
# yum update
# yum install tcpdump
Centos 8:
# dnf update
# dnf install tcpdump
Синтаксис
Эта команда имеет весьма простой и понятный синтаксис, отличается наличием большого количества вспомогательных опций. Перед изучением примеров эксплуатации команды требуется тщательно рассмотреть возможности.
Синтаксис:
tcpdump [опции] [требуемый интерфейс] [фильтр/фильтры]
При запуске утилиты tcpdump необходимо в обязательном порядке определиться с интерфейсом. Именно с его помощью будет осуществляться отслеживание сетевых пакетов. Если пользователь не укажет требуемый интерфейс, «по умолчанию» будет использован именно тот, который располагается первым в списке.
Опции дают возможность настроить способ отображения, а также откорректировать возможности самой команды. После указания типа используемого фильтра отсеиваются те пакеты, которые не нужны для исследования.
Основной перечень опций, поддерживаемых утилитой:
- «-A» – для выведения всех пакетов (формат ASCII).
- «-c» – для закрытия утилиты после перехвата определенного количества сетевых пакетов.
- «-C» - для записи обнаруженных сетевых пакетов в единый файл, проверки его размера. Если он будет больше заданных пользователем параметров, появляется возможность создания нового файла.
- «-D» - для выведения списка всех сетевых интерфейсов, которые доступны для пользователя.
- «-e» - для выведения информации об уровне соединения для каждого отдельного пакета. Такая опция может оказаться полезной в том случае, когда пользователю нужно увидеть MAC-адрес.
- «-f» - для выведения доменного имени для каждого отдельного IP-адреса.
- «-F» - для прочтения и тщательного изучения пакетов именно из файла, а не из интерфейса.
- «-G» - для создания нового файла спустя определенный временной промежуток.
- «-H» - для обнаружения и изучения заголовков «802.11s».
- «-i» - для указания имени интерфейса при последующей перехватке пакетов. У пользователя появляется возможность захватить пакет с различных интерфейсов после прописывания any.
- «-I» - для переключения интерфейса в режим монитора. В последующем будут перехвачены все проходящие пакеты.
- «-j» - для установки формата Timestamp, который предназначен для последующего сохранения пакетов.
- «-J» - для просмотра Timestamp, которые доступны на данный момент времени.
- «-K» - для исключения вероятности проверки контрольных сумм пакетов.
- «-l» - для добавления поддержки прокрутки, используемой совместно с выводом.
- «-L» - для выведения поддерживаемых протоколов, предназначенных для подключения интерфейса.
- «-n» - для исключения вероятности отображения доменных имен.
- «-r» - для прочтения специализированных пакетов из фалов, которые созданы с использованием «-w».
- «-v», «-vv», « -vvv» - для более подробного вывода требуемой информации.
- «-q» - для выведения минимального количества данных.
- «-w» - для записи вывода в определенный файл.
- «-Z» - для просмотра пользователя, от имени которого в последующем создаются файлы.
При указании требуемой команды требуется обязательно прописывать фильтры, которые позволят увидеть только те пакеты, необходимые пользователю. Фильтровать получаемую информацию можно различными способами – по протоколу, пот типу сети, по интерфейсу, по IP-адресу и многому другому.
После указания определённых опций, рассмотрим фильтры. Пользователю доступно несколько параметров, позволяющих отсеивать ненужную информацию:
- «host» - по названию хоста.
- «ip» - по IP-адресу.
- «proto» - по протоколу.
- «net» - по адресу определенной сети или подсети.
- «port» – по адресу требуемого порта.
- «src» - по показателям, которые касаются только отправителя.
- «dst» - по показателям, которые касаются только получателя.
Допускается комбинирование фильтров между собой. Это позволит получить именно тот результат, который ждет пользователь.
Вышеописанный список – это далеко не весь функционал, который поддерживает утилита tcpdump. Этого перечня будет вполне достаточно для решения большинства самых популярных задач.
Примеры
Перед использованием утилиты необходимо в обязательном порядке проверить, какие именно интерфейсы доступны для вас. Для этой цели можно воспользоваться аргументом «-D».
tcpdump -D
Изучение примеров использования tcpdump стоит начать с возможности захвата трафика (к примеру, при наличии интерфейса eth0). У большинства пользователей такой интерфейс является основным. Именно он подключен к интернет-сети. Чтобы воспользоваться программой, потребуется иметь права «супер пользователя», поэтому нужно залогиниться от root (su-) или использовать sudo.
# tcpdump -i eth0
Для остановки команды можно воспользоваться быстрым набором, достаточно нажать 2 клавиши Ctrl+C. В вашем выводе будут показаны все перехваченные с помощью утилиты пакеты. Стоит отметить, что допускается контроль подробности вывода информации. Для этого используется аргумент «-v».
# tcpdump -v -i eth0
Чтобы посмотреть, что происходит можно взглянуть на все интерфейсы "any".
# tcpdump -i any
У вас имеется возможность изучить данные о времени существования ttl-пакетов, версию применяемого протокола ТСР, а также длину поля, где присутствует заголовок. Если воспользоваться опцией «-vv», можно вывести данные о проверке контрольной суммы определенного пакета и его содержимое.
Стоит рассмотреть несколько примеров использования фильтров:
- Фильтруем входящий трафик, который идет на наш персональный компьютер. Предположим, что локальный IP-адрес 192.168.20.7.
# tcpdump -i eth0 ip dst 192.168.20.7
- Найти трафик по айпи адресу.
# tcpdump host 87.250.250.80
- Отбор пакетов, которые отправляются на определенный узел. Для этого нужно ввести -
# tcpdump -i eth0 dst host yandex.ru
- Фильтрация трафика по порту.
tcpdump port 3389
- Отбор ответных пакетов, которые распространяются на определенный хост.
# tcpdump -i eth0 src host yandex.ru.
Если потребуется дополнительное полное изучение содержимого, необходимо воспользоваться функционалом «-v» или «-vv».
При использовании tcpdump весьма полезен оператор and. С его помощью появляется возможность объединения нескольких фильтров в один. Нужно ввести, к примеру:
# tcpdump dst host ya.ru and src host vseprolinux.ru
В определенных случаях требуется сохранение предварительно захваченного трафика. Для этих целей используется аргумент «-w». Потребуется ввести в терминале:
# tcpdump -i eth0 -w savetrafik.pcap
Данный файл без особого труда открывается с помощью специализированных программ, предназначенных для чтения файлов данного формата. Чаще всего используется Wireshark, отличающийся простотой эксплуатации.
Как видно из всего вышесказанного, утилита tcpdump – это хороший сетевой анализатор, имеющий большой функционал. Программа работает только через командную строку.