Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Команда tcpdump для начинающих

Оригинал: Linux tcpdump Command Tutorial for Beginners (8 Examples)
Автор: Himanshu Arora
Дата публикации: 17 октября 2018 года
Перевод: А. Кривошей
Дата перевода: август 2019 г.

Каждый раз, когда вы открываете веб-страницу на своем компьютере, через сетевой интерфейс отправляются и принимаются пакеты данных. Иногда анализ этих пакетов становится важным по многим причинам. К счастью, Linux предлагает утилиту командной строки, которая выводит информацию, связанную с этими пакетами данных.

В этой статье мы обсудим основы использования рассматриваемой утилиты - tcpdump. Необходимо отметить, что все приведенные здесь примеры были протестированы на машине с Ubuntu 18.04 LTS.

Команда tcpdump

Команда tcpdump в Linux позволяет вам выводить сетевой трафик. Ниже приводится ее краткий синтаксис:

tcpdump [OPTIONS]

А вот детальный синтаксис:

tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
               [ -c count ]
               [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
               [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
               [ --number ] [ -Q in|out|inout ]
               [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
               [ -W filecount ]
               [ -E spi@ipaddr algo:secret,...  ]
               [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
               [ --time-stamp-precision=tstamp_precision ]
               [ --immediate-mode ] [ --version ]
               [ expression ]

И вот как справочная страница утилиты описывает ее:

Tcpdump выводит описание содержимого пакетов на сетевом интерфейсе, которые соответствуют логическому выражению; описанию предшествует отметка времени, отображаемая по умолчанию в виде часов, минут, секунд и долей секунды с полуночи.
Его также можно запустить с флагом -w, который заставляет ее сохранять данные в файл для последующего анализа, и/или с флагом -r, который заставляет ее читать из сохраненного файла прежде, чем читать пакеты с сетевого интерфейса. Его также можно запустить с флагом -V, который заставляет ее читать список сохраненных файлов.
Во всех случаях tcpdump будет обрабатывать только пакеты, которые соответствуют логическому выражению.

Ниже приведены примеры в стиле вопросов и ответов, которые должны дать вам лучшее представление о том, как работает команда tcpdump.

Q1. Как использовать tcpdump?

Прежде чем использовать tcpdump для перехвата пакетов данных, в идеале вы должны знать, на каком сетевом интерфейсе вы хотите запустить ее. Для получения списка сетевых интерфейсов, доступных в системе, используйте параметр командной строки -D.

tcpdump -D

Вот как справочная страница описывает эту опцию:

Выводит список сетевых интерфейсов, доступных в системе и для которых tcpdump может захватывать пакеты. Для каждого сетевого интерфейса выводятся номер и имя интерфейса, за которым, возможно, следует текстовое описание интерфейса. Имя или номер интерфейса можно указать после флага -i, чтобы задать интерфейс для захвата.
Это может быть полезно в системах, в которых нет команды для их перечисления (например, в системах Windows или системах UNIX, в которых отсутствует ifconfig -a); число может быть полезно в Windows 2000 и более поздних системах, где имя интерфейса представляет собой довольно сложную строку.
Флаг -D не будет поддерживаться, если tcpdump был собран с более старой версией libpcap, в которой нет функции pcap_findalldevs ().

Например, в моем случае был получен следующий вывод:

1.wlx18a6f713679b [Up, Running]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]
4.enp3s0 [Up]
5.nflog (Linux netfilter log (NFLOG) interface)
6.nfqueue (Linux netfilter queue (NFQUEUE) interface)
7.usbmon1 (USB bus number 1)
8.usbmon2 (USB bus number 2)
9.usbmon3 (USB bus number 3)
10.usbmon4 (USB bus number 4)

Теперь, когда у вас есть список интерфейсов, вы можете выбрать один из них и передать его имя в качестве входных данных параметру командной строки -i команды tcpdump. Например:

tcpdump -i wlx18a6f713679b

Далее часть вывода, произведенного этой командой в моем случае:

Q2. Как заставить tcpdump завершить работу после получения заданного количества пакетов?

Это может быть достигнуто с помощью параметра командной строки -c. Например, если вы хотите, чтобы tcpdump отображал только информацию, связанную с 10 пакетами, вы можете сделать это следующим образом:

tcpdump -c 10

Например, в моем случае я выполнил следующую команду:

tcpdump -c 10 -i wlx18a6f713679b

Ниже приводится ее вывод:

вывод команды tcpdump -c 10 -i wlx18a6f713679b

Таким образом, вы можете увидеть, что были захвачены 10 пакетов.

Q3. Как сделать так, чтобы tcpdump отображал заголовок уровня ссылки в выводе?

Это можно сделать с помощью параметра командной строки -e. Например:

tcpdump -e -i wlx18a6f713679b

И вот результат:

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

Q4. Как сделать так, чтобы tcpdump отображал иностранные IP-адреса численно?

Это может быть достигнуто с помощью параметра командной строки -f.

tcpdump -f -i [INTERFACE]

Отображение в tcpdump «чужих» IPv4-адресов в числовом, а не в символьном смысле имеет свои преимущества в определенных ситуациях. Один такой пример упоминается в справочной странице утилиты:

Эта опция предназначена для того, чтобы обойти серьезные неполадки на сервере NIS от Sun - обычно он зависает навсегда при попытке трансляции нелокальных численные IP-адреса.

Q5. Как заставить tcpdump выдавать номера пакетов в выводе?

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

Например, я выполнил следующую команду:

tcpdump --number -i wlx18a6f713679b

И вот часть вывода:

Итак, теперь вы можете видеть, что каждая строка начинается с номера.

Q6. Как сделать вывод tcpdump более коротким?

Это можно сделать с помощью параметра командной строки -q. Вот как это объясняется на справочной странице утилиты:

Быстрый (тихий?) вывод. Выводите меньше протокольной информации, чтобы строки были короче.

Ниже приведен пример этой опции:

пример опции -q

Таким образом, вы можете видеть, что на этот раз в выводе было меньше информации.

Q7. Как убрать информацию о временных метках из вывода tcpdump?

Для этого используйте параметр командной строки -t. Вот пример команды:

tcpdump -t -i wlx18a6f713679b

А вот вывод:

Таким образом, вы можете видеть, что информация о временной метке (которая обычно находится в начале каждой строки) сейчас отсутствует.

Q8. Как заставить tcpdump производить детальный вывод?

В этом случае вы можете использовать параметр командной строки -v. Ниже описано, как справочная страница утилиты объясняет эту опцию:

tcpdump -v -i [INTERFACE]

Производится более подробный вывод. Например, выводятся время жизни, идентификатор, общая длина и опции IP-пакета. Также команда включает дополнительные проверки целостности пакета, такие как проверка контрольной суммы заголовка IP и ICMP.

Заключение

Мы только что коснулись этой темы, поскольку команда tcpdump предлагает множество параметров командной строки. Чтобы познакомиться с ними поближе, вы можете перейти на справочную страницу утилиты.


Другие статьи о tcpdump в Linux на нашем сайте: