Как использовать tcpdump и 6 примеров

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

В этой статье мы подробно обсудим команду tcpdump, а также некоторые руководства по установке и использованию tcpdump в вашей системе Linux.

Что такое команда tcpdump?

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

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

Как установить tcpdump в Linux

Хотя в большинстве случаев tcpdump предустановлен в вашей системе, некоторые дистрибутивы Linux не поставляются с пакетом. Поэтому вам, возможно, придется вручную установить утилиту в вашей системе.

Вы можете проверить, установлен ли tcpdump в вашей системе, используя команду which .

 which tcpdump

Если в выходных данных отображается путь к каталогу ( / usr / bin / tcpdump ), значит, в вашей системе установлен пакет. Однако, если нет, вы можете легко сделать это с помощью диспетчера пакетов по умолчанию в вашей системе.

Чтобы установить tcpdump в дистрибутивах на основе Debian, таких как Ubuntu:

 sudo apt-get install tcpdump

Установить tcpdump на CentOS тоже просто.

 sudo yum install tcpdump

В дистрибутивах на основе Arch:

 sudo pacman -S tcpdump

Для установки в Fedora:

 sudo dnf install tcpdump

Обратите внимание, что пакет tcpdump требует libcap в качестве зависимости, поэтому убедитесь, что вы также установили его в своей системе.

Примеры tcpdump для захвата сетевых пакетов в Linux

Теперь, когда вы успешно установили tcpdump на свой Linux-компьютер, пришло время отслеживать некоторые пакеты. Поскольку tcpdump требует прав суперпользователя для выполнения большинства операций, вам придется добавить sudo к своим командам.

1. Список всех сетевых интерфейсов

Чтобы проверить, какие сетевые интерфейсы доступны для захвата, используйте флаг -D с командой tcpdump.

 tcpdump -D

Передача флага –list-interfaces в качестве аргумента вернет тот же результат.

 tcpdump --list-interfaces

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

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

 tcpdump --interface any

Система отобразит следующий вывод.

Связанный: Что такое модель взаимодействия открытых систем?

2. Формат вывода tcpdump

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

 17:00:25.369138 wlp0s20f3 Out IP localsystem.40310 > kul01s10-in-f46.1e100.net.https: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 117964079 ecr 816509256], length 33

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

Вывод содержит следующую информацию.

  1. Отметка времени полученного пакета
  2. Имя интерфейса
  3. Поток пакетов
  4. Название сетевого протокола
  5. IP-адрес и сведения о порте
  6. Флаги TCP
  7. Порядковый номер данных в пакете
  8. Подтвержденные данные
  9. Размер окна
  10. Длина пакета

В первом поле ( 17: 00: 25.369138 ) отображается отметка времени, когда ваша система отправила или получила пакет. Записанное время извлекается из местного времени вашей системы.

Второе и третье поля обозначают используемый интерфейс и поток пакета. В приведенном выше фрагменте wlp0s20f3 – это имя беспроводного интерфейса, а Out – это поток пакетов.

Четвертое поле включает информацию, относящуюся к имени сетевого протокола. Как правило, вы найдете два протокола – IP и IP6 , где IP означает IPV4, а IP6 – для IPV6.

Следующее поле содержит IP-адреса или имя исходной и целевой системы. За IP-адресами следует номер порта.

Шестое поле вывода состоит из флагов TCP. В выводе tcpdump используются различные флаги.

Название флага Значение Описание
SYN S Подключение начато
ПЛАВНИК F Подключение завершено
ТОЛКАТЬ п Данные отправлены
RST р Соединение сброшено
ACK . Подтверждение

Вывод также может содержать комбинацию нескольких флагов TCP. Например, FLAG [f.] Обозначает пакет FIN-ACK.

Двигаясь дальше в выходном фрагменте, следующее поле содержит порядковый номер ( seq 196: 568 ) данных в пакете. Первый пакет всегда имеет положительное целочисленное значение, а последующие пакеты используют относительный порядковый номер для улучшения потока данных.

Следующее поле содержит номер подтверждения ( ack 1 ) или простой номер подтверждения. Пакет, захваченный на машине отправителя, имеет номер подтверждения 1. На стороне получателя номер Ack – это значение следующего пакета.

Девятое поле вывода соответствует размеру окна ( выигрыш 309 ), который представляет собой количество байтов, доступных в приемном буфере. Есть несколько других полей, которые следуют за размером окна, включая максимальный размер сегмента (MSS).

Последнее поле ( длина 33 ) содержит длину всего пакета, захваченного tcpdump.

3. Ограничьте количество перехваченных пакетов.

При первом запуске команды tcpdump вы можете заметить, что система продолжает захватывать сетевые пакеты, пока вы не передадите сигнал прерывания. Вы можете переопределить это поведение по умолчанию, указав количество пакетов, которые вы хотите перехватить, заранее с помощью флага -c .

 tcpdump --interface any -c 10

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

4. Фильтрация пакетов по полям.

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

Чтобы захватить только TCP-пакеты, введите:

 tcpdump --interface any -c 5 tcp

Точно так же, если вы хотите отфильтровать вывод по номеру порта:

 tcpdump --interface any -c 5 port 50

Вышеупомянутая команда будет получать только пакеты, переданные через указанный порт.

Чтобы получить подробную информацию о пакете для определенного хоста:

 tcpdump --interface any -c 5 host 112.123.13.145

Если вы хотите отфильтровать пакеты, отправленные или полученные определенным хостом, используйте аргумент src или dst с командой.

 tcpdump --interface any -c 5 src 112.123.13.145
tcpdump --interface any -c 5 dst 112.123.13.145

Вы также можете использовать логические операторы и и или для объединения двух или более выражений вместе. Например, чтобы получить пакеты, принадлежащие исходному IP- адресу 112.123.13.145 и использовать порт 80 :

 tcpdump --interface any -c 10 src 112.123.13.145 and port 80

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

 tcpdump --interface any -c 10 "(src 112.123.13.145 or src 234.231.23.234) and (port 45 or port 80)"

5. Просмотрите содержимое пакета.

Вы можете использовать флаги -A и -x с командой tcpdump для анализа содержимого сетевого пакета. Флаг -A обозначает формат ASCII , а -x обозначает шестнадцатеричный формат.

Чтобы просмотреть содержимое следующего сетевого пакета, захваченного системой:

 tcpdump --interface any -c 1 -A
tcpdump --interface any -c 1 -x

По теме: Что такое потеря пакетов и как устранить ее причину?

6. Сохраните данные захвата в файл.

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

 tcpdump --interface any -c 10 -w data.pcap

Расширение файла .pcap означает данные о захвате пакетов . Вы также можете выполнить вышеупомянутую команду в подробном режиме, используя флаг -v .

 tcpdump --interface any -c 10 -w data.pcap -v

Чтобы прочитать файл .pcap с помощью tcpdump, используйте флаг -r, за которым следует путь к файлу. -R означает чтение .

 tcpdump -r data.pcap

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

 tcpdump -r data.pcap port 80

Мониторинг сетевого трафика в Linux

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

Но перед этим ваше устройство должно быть подключено к Интернету. Для новичков в Linux даже подключение к Wi-Fi через командную строку может быть немного сложной задачей. Но если вы используете правильные инструменты, это совсем несложно.