Linux tcpdump

надпись tcpdump

tcpdump - один из самых известных инструментов для анализа сетевого трафика. Используя команду tcpdump, мы можем захватить и проанализировать TCP/IP-пакеты. Утилитой очень удобно пользоваться для выявления неполадок на сетевом уровне, она доступна в большинстве дистрибутивов Linux. Для систем на базе Debian может быть легко установлена с помощью менеджера пакетов apt: apt install tcpdump -y

Когда мы запускаем команду tcpdump без каких-либо параметров, она начинает захватывать пакеты со всех интерфейсов. Чтобы остановить или отменить команду, нажмите сочетание клавиш ctrl + c, если в вашем эмуляторе терминала это сочетание закреплено за каким-либо другим действием, то используйте сочетание клавиш ctrl + alt + c для прерывания исполняющейся команды.

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

Захват пакетов с определённого интерфейса

Для захвата пакетов из определённого сетевого интерфейса используйте параметр -i с именем интерфейса, пакеты с которого требуется захватить. Пример для интерфейса enp3s0: tcpdump -i enp3s0

Захват определённых пакетов из определённого интерфейса

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

Отображение доступных интерфейсов

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

Пользовательская метка времени

По умолчанию в выводе команды tcpdump отсутствует "человекочитаемая" метка времени, если вы хотите её вывести, то используйте параметр -tttt, как показано на примере ниже: tcpdump -tttt -i enp0s3

Захват и сохранение пакетов в файл

Для этой цели используется ключ -w, после которого пишется имя и расположение сохраняемого файла. Расширение файла должно быть .pcap. Предположим, нам нужно сохранить захваченные пакеты с интерфейса enp0s3 в файл с названием enp0s3-snif.pcap, который будет расположен в текущей директории, тогда команда будет иметь следующий вид: tcpdump -w enp0s3-snif.pcap -i enp0s3

Захват и сохранение пакетов определённого размера

Например для захвата пакетов, размер которых больше чем 1024 байта, и сохранения их в файл с именем enp0s3.pcap нам понадобится команда вида: tcpdump -w enp0s3.pcap greater 1024 а для пакетов меньше 1024 бита: tcpdump -w enp0s3.pcap less 1024

Чтение из сохранённого файла

В приведённом выше примере мы сохранили захваченные пакеты в файл, но мы можем также и читать эти пакеты из файла, используя параметр -r, как показано в примере ниже: tcpdump -r enp0s3.pcap

Захват только TCP-пакетов на определённом интерфейсе

В tcpdump есть возможность захватывать только tcp-пакеты, используя опцию tcp: tcpdump -i enp0s3 tcp

Захват пакетов из определённого порта на определённом интерфейсе

Используя команду tcpdump, мы можем захватить пакет с определённого порта, например 22, на определённом интерфейсе, например enp0s3: tcpdump -i enp0s3 port 22

Захват пакетов с определённого IP-адреса

Используя ключевое слово src, за которым следует ip-адрес, мы можем собирать пакеты с определённого IP-адреса источника: tcpdump -n -i enp0s3 src 169.134.0.11

Захват пакетов назначенных определённому IP-адресу

Синтаксис: tcpdump -n -i {имя-интерфейса} dst {IP-адрес} Пример: tcpdump -n -i enp0s3 dst 169.134.0.11

Захват пакетов TCP между двумя хостами

Предположим нам надо захватить tcp-пакеты между хостами с IP адресами 169.134.0.11 и 169.134.0.12, тогда команда для этой цели будет иметь следующий вид: tcpdump -i enp0s3 tcp and \(host 169.134.0.11 or host 169.134.0.12\)

Захват пакетов передаваемых по SSH между двумя хостами

Для захвата пакетов мы указываем порт 22, который используется по умолчанию для ssh: tcpdump -i enp0s3 src 169.134.0.11 and port 22 and dst 169.134.0.12 and port 2

Захват сетевых пакетов udp между двумя хостами

Синтаксис: tcpdump -w -s -i udp and \(host and host \) Пример: tcpdump -i enp0s3 udp and \(host 169.134.0.11 and host 169.134.0.12\)

Захват пакетов в формате HEX и ASCII

Используя команду tcpdump, мы можем захватить пакеты tcp/ip в формате ASCII и HEX. Для захвата пакетов в формате ASCII используйте параметр -A: tcpdump -c 11 -A -i enp0s3 Для захвата пакетов в формате HEX и ASCII используйте опцию -XX: tcpdump -c 11 -XX -i enp0s3