Хотите узнать больше о трафике в вашей сети? Научитесь использовать tcpdump в Linux на этих примерах.
Вы пытаетесь захватить пакеты данных для анализа трафика в вашей сети? Возможно, вы администратор сервера, который столкнулся с проблемой и хочет отслеживать данные, передаваемые по сети. Какой бы ни была ситуация, Linux-утилита tcpdump — то, что вам нужно.
В этой статье мы подробно обсудим команду tcpdump, а также несколько руководств по установке и использованию tcpdump в вашей системе Linux.
Программа tcpdump — это утилита командной строки, которую можно установить бесплатно.
Содержание
Что такое команда tcpdump?
Tcpdump — это мощный инструмент мониторинга сети, который позволяет пользователю эффективно фильтровать пакеты и трафик в сети. Вы можете получить подробную информацию о TCP/IP и пакетах, передаваемых в вашей сети. Tcpdump — это утилита командной строки, что означает, что вы можете запускать ее на серверах Linux без дисплея.
Системные администраторы также могут интегрировать утилиту tcpdump с cron для автоматизации различных задач, таких как ведение журнала. Поскольку его многочисленные функции делают его довольно универсальным, tcpdump работает как средство устранения неполадок, а также как инструмент безопасности.
В чем разница между Wireshark и tcpdump?
И Wireshark, и tcpdump перехватывают пакеты. На этом уровне оба эти инструмента одинаковы. Однако у Wireshark есть интерфейс DUI, который включает в себя функции анализа пакетов. Tcpdump — это утилита командной строки. У него меньше функций, и его сложнее использовать.
Как установить tcpdump в Linux
Хотя в большинстве случаев вы обнаружите, что tcpdump предустановлен в вашей системе, некоторые дистрибутивы Linux не поставляются с пакетом. Поэтому вам, возможно, придется вручную установить утилиту в вашей системе.
Вы можете проверить, установлен ли tcpdump в вашей системе, используя команду which .
root@grafana:/home/administrator# which tcpdump
/usr/bin/tcpdump
root@grafana:/home/administrator#
Если в выводе отображается путь к каталогу ( /usr/bin/tcpdump ), значит, в вашей системе установлен пакет. Однако, если нет, вы можете легко установить 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 в свои команды.
Список всех сетевых интерфейсов
Чтобы проверить, какие сетевые интерфейсы доступны для захвата, используйте флаг -D с командой tcpdump.
root@grafana:/home/administrator# tcpdump -D
1.eth0 [Up, Running, Connected]
2.eth1 [Up, Running, Connected]
3.any (Pseudo-device that captures on all interfaces) [Up, Running]
4.lo [Up, Running, Loopback]
5.bluetooth-monitor (Bluetooth Linux Monitor) [Wireless]
6.nflog (Linux netfilter log (NFLOG) interface) [none]
7.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
8.dbus-system (D-Bus system bus) [none]
9.dbus-session (D-Bus session bus) [none]
root@grafana:/home/administrator#
После получения списка сетевых интерфейсов пришло время контролировать вашу сеть, перехватывая пакеты в вашей системе. Хотя вы можете указать, какой интерфейс вы хотите использовать, аргумент any указывает tcpdump перехватывать сетевые пакеты с использованием любого активного интерфейса.
tcpdump --interface any
Система отобразит вывод со всех интерфейсов. Вы можете выбрать также свой сетевой интерфейс
tcpdump --interface eth1
Вы можете прервать захват, нажав Ctrl + C
.
Как понять информацию о захваченном пакете
Чтобы узнать о различных полях захваченного пакета, давайте рассмотрим пример TCP-пакета:
Пакет может иметь различные поля, но общие показаны выше.
Первое поле « 09:48:18.960683 » представляет время получения пакета.
Поле IP в данном поле указывается протокол.
Далее идут IP-адреса; первый IP-адрес [ 216.58.209.130 ] является исходным IP-адресом, а второй IP-адрес [ 10.0.2.15.55812 ] является IP-адресом назначения.
Затем вы получите флаг [ P. ]; список типичных флагов приведен ниже:
Flag | Type | Description |
“.” | ACK | Signifies acknowledgment |
S | SYN | Flag for starting a connection |
F | FIN | Flag for a closed connection |
P | PUSH | Indicates the push of data from the sender |
R | RST | Connection Reset |
Далее идет порядковый номер данных, содержащихся в пакете. Для первого захваченного пакета это абсолютное число. Последующие пакеты используют относительное число, чтобы упростить отслеживание. В этом примере последовательность seq 188:255
, что означает, что этот пакет содержит байты с 188 по 255 этого потока.
За этим следует номер подтверждения: ack 1
. В данном случае это 1, поскольку сторона отправляет данные. Для стороны, получающей данные, это поле представляет следующий ожидаемый байт (данные) в этом потоке. Например, номер Ack для следующего пакета в этом потоке будет 255.
Следующее поле — это размер окна win 65535
, который представляет количество байтов, доступных в приемном буфере, за которыми следуют такие параметры TCP, как MSS (максимальный размер сегмента — Maximum Segment Size) или масштаб окна. nop
— заполнение, используемое для того, чтобы сделать заголовок TCP кратным 4 байтам. TS val
— это временная метка
Наконец, у нас есть длина пакета, length 70
, которая представляет длину в байтах данных полезной нагрузки. Длина — это разница между последним и первым байтами « 185:255 » порядкового номера.
Ограничить количество захваченных пакетов
При первом запуске команды tcpdump вы можете заметить, что система продолжает перехватывать сетевые пакеты до тех пор, пока вы не передадите сигнал прерывания. Вы можете переопределить это поведение по умолчанию, заранее указав количество пакетов, которые вы хотите захватить, с помощью флага -c .
tcpdump --interface any -c 10
Вышеупомянутая команда захватит десять пакетов с любого активного сетевого интерфейса.
Отобразить IP адрес вместо доменного имени
При захвате трафика чтобы удобнее было его читать можно использовать ключ -n, он отобразит нам ip адрес вместо имена хоста , информация станет более читабельной.
tcpdump --interface eth1 -c 5
tcpdump --interface eth1 -c 5 -n
Фильтрация пакетов
Когда вы устраняете проблему, получение большого блока текста на вашем терминале не облегчает задачу. Вот где в игру вступает функция фильтрации в 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. Просто передайте флаг -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
Как убить процесс tcpdump?
Обычно нажатие Control-C останавливает процесс tcpdump. Если это не сработает, найдите идентификатор процесса tcpdump с помощью команды ps -aux , затем введите kill -9 , затем идентификатор процесса и нажмите клавишу возврата.
Где хранятся файлы tcpdump?
Если вы не укажете каталог и имя файла, в котором должны храниться записи tcpdump, файл будет записан в каталог, в котором вы находились при запуске tcpdump. Вы можете указать, где tcpdump должен хранить перехваченные пакеты, с помощью sudo tcpdump -i 1 -w , за которым следует путь и имя файла.