Tcpdump что за программа

Консольная утилита tcpdump предназначена для исследования сетевого трафика на linux серверах. Как работать с tcpdump на Linux? Рассмотрим в этой статье.

Оглавление скрыть

Установка и начало использования

Установить эту утилиту в debian или ubuntu можно так:

$ sudo apt install tcpdump

Использовать данное приложение может только администратор. Поэтому для работы используем sudo или работаем под пользователем root.

Первым делом можем посмотреть список доступных интерфейсов используя опцию -D:

Рассмотрим эти интерфейсы:

  • ens18 – обычный сетевой интерфейс;
  • lo – локальный сетевой интерфейс;
  • any – псевдоинтерфейс обозначающий все интерфейсы;
  • docker0 – у меня установлен в системе docker и этот интерфейс относится к нему;
  • nflog, nfqueue, usbmon1 – не относятся к сети, и в этой статье рассматриваться не будут.

Захват пакетов и вывод информации

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

tcpdump — Traffic Capture & Analysis


$ sudo tcpdump -i ens18 -c 10 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on ens18, link-type EN10MB (Ethernet), capture size 262144 bytes 17:34:28.863132 IP 172.30.95.116.ssh > 172.30.81.7.57376: Flags [P.], seq 1492170785:1492170901, ack 2057276671, win 501, length 116 17:34:28.863171 IP 172.30.95.116.ssh > 172.30.81.7.57376: Flags [P.], seq 116:152, ack 1, win 501, length 36 17:34:28.863206 IP 172.30.95.116.ssh > 172.30.81.7.57376: Flags [P.], seq 152:268, ack 1, win 501, length 116 17:34:28.863233 IP 172.30.95.116.ssh > 172.30.81.7.57376: Flags [P.], seq 268:304, ack 1, win 501, length 36 17:34:28.863294 IP 172.30.81.7.57376 > 172.30.95.116.ssh: Flags [.], ack 152, win 49179, length 0 17:34:28.863306 IP 172.30.81.7.57376 > 172.30.95.116.ssh: Flags [.], ack 268, win 49179, length 0 17:34:28.865617 IP 172.30.95.116.ssh > 172.30.81.7.57376: Flags [P.], seq 520:668, ack 1, win 501, length 148 17:34:28.865696 IP 172.30.81.7.57376 > 172.30.95.116.ssh: Flags [.], ack 668, win 49183, length 0 17:34:28.865792 IP 172.30.95.116.ssh > 172.30.81.7.57376: Flags [P.], seq 888:1036, ack 1, win 501, length 148 17:34:28.865888 IP 172.30.95.116.ssh > 172.30.81.7.57376: Flags [P.], seq 1072:1204, ack 1, win 501, length 132 10 packets captured 42 packets received by filter 28 packets dropped by kernel

Теперь рассмотрим полученную информацию, которая состоит из заголовков каждого пакета выводимые построчно. Строка состоит из следующих полей:

  • время;
  • протокол;
  • ip источника и его порт;
  • ip назначения и его порт;
  • флаги;
  • seq – номер первого байта сегмента. Данные, передающиеся по TCP делятся на сегменты, а в заголовке указывается порядковый номер первого байта в этом сегменте;
  • ack – номер подтверждения, если присутствует. Получатель после приёма сегмента или нескольких сегментов посылает номер подтверждения;
  • win – размер окна приема. Получатель указывает размер окна, больше которого отправитель не может отправить сегмент;
  • options – опции, если присутствуют;
  • length – длина полезной нагрузки данных.

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

TCP Dump — What is it and how to use it?

Фильтры

Чтобы не захватывать все пакеты, нужно использовать фильтры. Например можно захватить пакеты только от определённого ip адреса, номера порта или протокола. Вот список самых распространённых фильтров:

Например захватим 10 пакетов связанных с www.incentivespro.com.

$ sudo tcpdump -i ens18 -c 10 host yandex.ru

Совмещение различных фильтров

Фильтры можно совмещать, например захватим только icmp пакеты связанные с ip адресом 172.30.81.7:

$ sudo tcpdump -i ens18 -c 5 host 172.30.81.7 and icmp

Совмещать фильтры можно следующими операторами:

  • and – для захвата пакета должны сработать оба фильтра;
  • or – для захвата пакета должен сработать любой из фильтров;
  • not – исключить из захвата эти пакеты.

В примере выше мы использовали – and.

Опции отвечающие за формат и количество выводимой информации

Теперь разберёмся с наиболее используемыми опциями, которые отвечают за формат вывода:

  • -i – прослушивать конкретный интерфейс;
  • -n – отображать ip адреса вместо имен;
  • -nn – отображать ip адреса и номера портов вместо имени и названия протоколов;
  • -q – минимальное количество информации о пакете;
  • -t – не отображать метку времени в каждой строке;
  • -tttt – задает вывод временных меток в такой форме: 2021-03-03 16:07:29.578942;
  • -X – показывать содержимое пакета в шестнадцатеричной кодировке и в ASCII;
  • -XX – то же, что и -X, но также показывает ethernet заголовки;
  • -v, -vv, -vvv – увеличить количество получаемой информации;
  • -c – получить определённое число пакетов и завершить работу.

Примеры команд

Смотрим все пакеты на всех интерфейсах или на каком-то одном:

# tcpdump -i any # tcpdump -i eth0

Ловим пакеты у которых адрес:

  • источника или назначения равен 192.168.0.100;
  • источника равен 192.168.0.100;
  • назначения равен 192.168.0.100;
  • источника или назначения входит в подсеть 192.168.0.0/24

# tcpdump host 192.168.0.100 # tcpdump src 192.168.0.100 # tcpdump dst 192.168.0.100 # tcpdump net 192.168.0.0/24

Ловим пакеты у которых порт:

  • источника или назначения равен 8000;
  • источника равен 8000;
  • назначения равен 8000;
  • входит в диапазон портов 8000-9000;

# tcpdump port 8000 # tcpdump src port 8080 # tcpdump dst port 8080 # tcpdump portrange 8000-9000

Ловим пакеты определенного протокола:

# tcpdump icmp # tcpdump ip # tcpdump ip6 # tcpdump tcp # tcpdump udp

Ловим tcp пакеты у которых порт входит в группу портов:

tcpdump tcp and portrange 0-1000

Тоже самое, но смотрим содержимое пакетов:

# tcpdump -X tcp and portrange 0-1000

Пишем результат в файл и считываем из файла:

# tcpdump port 8000 -w capture_file # tcpdump -r capture_file

Итог

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

Утилита tcpdump для анализа сети

Имя статьи
Утилита tcpdump для анализа сети

Консольная утилита tcpdump предназначена для исследования сетевого трафика на linux серверах. Как работать с tcpdump на Linux? Рассмотрим в этой статье

Источник: sysadminium.ru

Примеры tcpdump в Linux

примеры tcpdump в linux

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

Читайте также:
Inventor что за программа

Установка

Большинство разработчиков операционных систем на базе Linux включают утилиту tcpdump в список предустановленных, но если по какой-то причине она в вашем дистрибутиве отсутствует, ее можно всегда скачать и установить через «Терминал». Если у вас ОС основана на Debian, а это Ubuntu, Linux Mint, Kali Linux и им подобные, нужно выполнить эту команду:

sudo apt install tcpdump

При установке вам нужно ввести пароль. Обратите внимание, что при наборе он не отображается, также для подтверждения установки нужно ввести символ «Д» и нажать Enter.

Если у вас Red Hat, Fedora или CentOS, то команда для установки будет иметь следующий вид:

sudo yam install tcpdump

После того как утилита будет установлена, ей сразу же можно пользоваться. Об этом и о многом другом будет рассказано дальше по тексту.

Синтаксис

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

tcpdump опции -i интерфейс фильтры

При использовании команды вам обязательно необходимо указывать интерфейс для отслеживания. Фильтры и опции — это не обязательные переменные, но они позволяют выполнить более гибкую настройку.

Опции

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

Опция Определение
-A Позволяет отсортировать пакеты с форматом ASCII
-l Добавляет функцию прокрутки
-i После ввода нужно указать сетевой интерфейс, который будет отслеживаться. Чтобы начать отслеживать все интерфейсы, впишите после опции слово «any»
-c Завершает процесс отслеживания после проверки указанного количества пакетов
-w Генерирует текстовый файл с отчетом проверки
-e Показывает уровень интернет-соединения пакета данных
-L Выводит только те протоколы, которые поддерживает указанный сетевой интерфейс
-C Создает другой файл во время записи пакета, если его размер больше заданного
-r Открывает файл для чтения, который был создан с помощью опции -w
-j Для записи пакетов будет использоваться формат TimeStamp
-J Позволяет просмотреть все доступные форматы TimeStamp
-G Служит для создания файла с логами. Опция требует также указания временного значения, по истечении которого будет создаваться новый лог
-v, -vv, -vvv В зависимости от количества символов в опции, вывод команды будет становиться подробнее (увеличение прямо пропорционально количеству символов)
-f В выводе показывает имя домена адресов IP
-F Позволяет считывать информацию не из сетевого интерфейса, а из указанного файла
-D Демонстрирует все сетевые интерфейсы, которые можно использовать
-n Деактивирует отображение доменных имен
-Z Задает пользователя, под учетной записью которого будут созданы все файлы
-K Пропуск анализа контрольных сумм
-q Демонстрация краткой информации
-H Позволяет обнаружить заголовки 802.11s
-I Используется при захвате пакетов в режиме монитора

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

Фильтры

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

Фильтр Определение
host Служит для указания имени хоста
net Указывает IP подсети и сети
ip Служит для указания адреса протокола
src Выводит пакеты, которые были отправлены с указанного адреса
dst Выводит пакеты, которые были получены указанным адресом
arp, udp, tcp Фильтрация по одному из протоколов
port Отображает информацию, относящуюся к определенному порту
and, or Служит для объединения нескольких фильтров в команде
less, greater Вывод пакетов меньше или больше указанного размера

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

Примеры использования

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

Просмотр списка интерфейсов

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

выполнение команды tcpdump с опцией d в linux

Как вы можете заметить, в примере есть восемь интерфейсов, которые можно просмотреть с помощью команды tcpdump. В статье будут приводиться примеры с ppp0, вы же можете использовать любой другой.

Обычный захват трафика

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

sudo tcpdump -i ppp0

Обратите внимание: перед самой командой нужно вписать «sudo», так как она требует права суперпользователя.

пример отображения трафика сетевого интерфейса с помощью команды tcpdump без использования опций и фильтров

Примечание: после нажатия Enter в «Терминале» беспрерывно будут отображаться перехваченные пакеты. Чтобы остановить их поток, нужно нажать комбинацию клавиш Ctrl+C.

Если вы выполняете команду без дополнительных опций и фильтров, то увидите следующий формат отображения отслеженных пакетов:

22:18:52.597573 IP vrrp-topf2.p.mail.ru.https > 10.0.6.67.35482 : Flags [P.], seq 1:595, ack 1118, win 6494, options [nop,nop,TS val 257060077 ecr 697597623], length 594

Где цветом выделено:

Синим Время получения пакета
Оранжевым Версия протокола
Зеленым Адрес отправителя
Фиолетовым Адрес получателя
Серым Дополнительная информация о tcp
Красным Размер пакета (отображается в байтах)

Этот синтаксис имеет возможность вывода в окне «Терминала» без использования дополнительных опций.

Захват трафика с опцией -v

Как известно из таблицы, опция -v позволяет увеличить количество информации. Разберем на примере. Проверим тот же интерфейс:

sudo tcpdump -v -i ppp0

пример отображения трафика сетевого интерфейса с помощью команды tcpdump с использованием опции -v в linux

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

IP (tos 0x0, ttl 58 , id 30675, offset 0, flags [DF] , proto TCP (6) , length 52

Где цветом выделено:

Оранжевым Версия протокола
Синим Продолжительность жизни протокола
Зеленым Длина заголовка поля
Фиолетовым Версия пакета tcp
Красным Размер пакета (отображается в байтах)

Также в синтаксис команды вы можете прописать опцию -vv или -vvv, что позволит еще больше увеличить объем выводимой информации на экран.

Опция -w и -r

В таблице опций упоминалось о возможности сохранять все выводимые данные в отдельный файл, чтобы позже их можно было просмотреть. За это отвечает опция -w. Пользоваться ей довольно просто, всего-навсего укажите ее в команде, а затем впишите название будущего файла с расширением «.pcap». Рассмотрим все на примере:

sudo tcpdump -i ppp0 -w file.pcap

пример опции -w в команде tcpdump в linux

Обратите внимание: во время записи логов в файл на экране «Терминала» не отображается никакой текст.

Когда вы захотите просмотреть записанный вывод, необходимо использовать опцию -r, после которой написать название ранее записанного файла. Применяется она без других опций и фильтров:

Читайте также:
Трактор программа что это

sudo tcpdump -r file.pcap

пример просмотра ранее сохраненного файла команды tcpdump с помощью опции w

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

Фильтрация по IP

Из таблицы фильтров мы знаем, что dst позволяет вывести на экран консоли только те пакеты, которые были получены адресом, что указан в синтаксисе команды. Таким образом очень удобно просматривать пакеты, полученные вашим компьютером. Для этого в команде нужно всего лишь указать свой IP-адрес:

sudo tcpdump -i ppp0 ip dst 10.0.6.67

пример использования фильтра dst и ip в команду tcpdump в linux

Как можно заметить, помимо dst, в команде мы прописали также фильтр ip. Другими словами, мы сказали компьютеру, чтобы при отборе пакетов он обращал внимание на их IP адрес, а не на другие параметры.

По IP можно отфильтровать и отправляемые пакеты. В примере приведем снова наш IP. То есть сейчас мы отследим, какие пакеты отправляются с нашего компьютера на другие адреса. Для этого нужно выполнить следующую команду:

sudo tcpdump -i ppp0 ip src 10.0.6.67

пример использования фильтра src и ip в команде tcpdump в linux

Как можно заметить, в синтаксисе команды мы изменили фильтр dst на src, тем самым сказав машине, чтобы она искала отправителя по IP.

Фильтрация по HOST

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

sudo tcpdump -i ppp0 dst host google-public-dns-a.google.com

пример использования фильтра dst и host в команде tcpdump в linux

На изображении можно увидеть, что в «Терминале» отображаются только те пакеты, которые были отправлены с нашего IP на хост google.com. Как можно понять, вместо хоста google, можно вписать любой другой.

Как и в случае с фильтрацией по IP, в синтаксисе dst можно заменить на src, чтобы увидеть пакеты, которые отправляются на ваш компьютер:

sudo tcpdump -i ppp0 src host google-public-dns-a.google.com

Обратите внимание: фильтр host должен стоять после dst или src, иначе команда выдаст ошибку. В случае с фильтрацией по IP, наоборот, dst и src стоят перед фильтром ip.

Применение фильтра and и or

Если у вас появляется необходимость использовать сразу несколько фильтров в одной команде, то для этого нужно применять фильтр and или or (зависит от случая). Указывая фильтры в синтаксисе и разделяя их этими оператором, вы «заставите» работать их как один. На примере это выглядит следующим образом:

sudo tcpdump -i ppp0 ip dst 95.47.144.254 or ip src 95.47.144.254

пример использования фильтра and и or в команде tcpdump в linux

Из синтаксиса команды видно, что мы хотим вывести на экран «Терминала» все пакеты, которые были отправлены на адрес 95.47.144.254 и пакеты, полученные этим же адресом. Также вы можете изменять некоторые переменные в этом выражении. Например, вместо IP указать HOST или заменить непосредственно сами адреса.

Фильтр port и portrange

Фильтр port отлично подойдет в тех случаях, когда нужно получить информацию о пакетах с определенным портом. Так, если вам нужно увидеть лишь ответы или запросы DNS, нужно указать порт 53:

sudo tcpdump -vv -i ppp0 port 53

пример использования фильтра port в команде tcpdump в linux

Если вы хотите просмотреть пакеты http, нужно ввести порт 80:

sudo tcpdump -vv -i ppp0 port 80

пример применения фильтра port в команде tcpdump в linux

Помимо прочего, есть возможность отследить сразу диапазон портов. Для этого применяется фильтр portrange:

sudo tcpdump portrange 50-80

пример использования фильтра portrange в синтаксисе команды tcpdump в linux

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

Фильтрация по протоколам

Вы также можете вывести на экран только тот трафик, который соответствует какому-либо протоколу. Для этого нужно использовать в качестве фильтра наименование этого самого протокола. Разберем на примере udp:

sudo tcpdump -vvv -i ppp0 udp

пример фильтрации команды tcpdump по протоколу в linux

Как можно увидеть на изображении, после выполнения команды в «Терминале» отобразились лишь пакеты с протоколом udp. Соответственно, вы можете осуществить фильтрацию и по другим, например, arp:

sudo tcpdump -vvv -i ppp0 arp

sudo tcpdump -vvv -i ppp0 tcp

Фильтр net

Оператор net помогает отфильтровать пакеты, беря за основу обозначение их сети. Пользоваться им так же просто, как и остальными — нужно в синтаксисе указать атрибут net, после чего вписать адрес сети. Вот пример такой команды:

sudo tcpdump -i ppp0 net 192.168.1.1

пример фильтрации команды tcpdump по обозначению сети в linux

Фильтрация по размеру пакета

Используем tcpdump для анализа и перехвата сетевого трафика

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

Вывод tcpdump

Утилита tcpdump позволяет проверять заголовки пакетов TCP/IP и выводить одну строку для каждого из пакетов. Она будет делать это до тех пор, пока не нажать Ctrl + C.

Давайте рассмотрим одну строку из примера вывода:

20:58:26.765637 IP 10.0.0.50.80 > 10.0.0.1.53181: Flags [F.], seq 1, ack 2, win 453, options [nop,nop,TS val 3822939 ecr 249100129], length 0

Каждая строка включает:

  • Метка времени Unix (20: 58: 26.765637)
  • протокол (IP)
  • имя или IP-адрес исходного хоста и номер порта (10.0.0.50.80)
  • имя хоста или IP-адрес назначения и номер порта (10.0.0.1.53181)
  • Флаги TCP (Flags [F.]). Указывают на состояние соединения и могут содержать более одного значения:
  • o S — SYN. Первый шаг в установлении соединения
  • F — FIN. Прекращение соединения
  • — ACK. Пакет подтверждения принят успешно
  • P — PUSH. Указывает получателю обрабатывать пакеты вместо их буферизации
  • R — RST. Связь прервалась

Установка tcpdump

В дистрибутивах на основе Debian tcpdump можно установить с помощью команды APT:

# apt install tcpdump -y

В дистрибутивах на основе RPM tcpdump можно установить с помощью YUM:

# yum install tcpdump -y

В RHEL 8 с использование DNF:

# dnf install tcpdump -y

Опции tcpdump

Запускать tcpdump нужно с правами root. Tcpdump включает в себя множество опций и фильтров. При запуске tcpdump без каких-либо параметров произойдет перехват всех пакетов, проходящих через интерфейс по умолчанию.

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

# tcpdump -D
# tcpdump —list-interfaces
1.eth0 2.nflog (Linux netfilter log (NFLOG) interface) 3.nfqueue (Linux netfilter queue (NFQUEUE) interface) 4.eth1 5.any (Pseudo-device that captures on all interfaces) 6.lo [Loopback]

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

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

# tcpdump -i eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes 01:06:09.278817 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 4761, seq 1, length 64 01:06:09.279374 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 4761, seq 1, length 64 01:06:10.281142 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 4761, seq 2, length 64

  • -v увеличивает количество отображаемой информации о пакетах
  • -vv дает еще более подробную информацию
Читайте также:
Axcrypt что это за программа

По умолчанию tcpdump преобразует IP-адреса в имена хостов, а также использует имена служб вместо номеров портов.

  • -n Если DNS не работает или вы не хотите, чтобы tcpdump выполнял поиск имени.

# tcpdump –n
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 04:19:07.675216 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186733178:2186733278, ack 204106815, win 37232, length 100 04:19:07.675497 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 100, win 65535, length 0 04:19:07.675747 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 100:136, ack 1, win 37232, length 36 04:19:07.675902 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 136, win 65535, length 0 04:19:07.676142 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 136:236, ack 1, win 37232, length 100

  • -c захватывает только набор строк, например, 5:

#tcpdump -c 5
04:19:07.675216 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186733178:2186733278, ack 204106815, win 37232, length 100 04:19:07.675497 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 100, win 65535, length 0 04:19:07.675747 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 100:136, ack 1, win 37232, length 36 04:19:07.675902 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 136, win 65535, length 0 04:19:07.676142 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 136:236, ack 1, win 37232, length 100 5 packets captured

  • -tttt для использования более удобных временных меток (по умолчанию используются временные метки Unix)

# tcpdump –tttt
2020-07-06 04:30:12.203638 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186734102:2186734138, ack 204107103, win 37232, length 36 2020-07-06 04:30:12.203910 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 36, win 65535, length 0 2020-07-06 04:30:12.204292 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 36:72, ack 1, win 37232, length 36 2020-07-06 04:30:12.204524 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 72, win 65535, length 0 2020-07-06 04:30:12.204658 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 72:108, ack 1, win 37232, length 36

Фильтры tcpdump

Фильтр выражений

Фильтр выражений выбирает, какие заголовки пакетов будут отображаться. Если фильтры не применяются, отображаются все заголовки пакетов.

Самые распространенные фильтры :

Фильтр портов

Фильт портов используется для просмотра пакетов, поступающих на определенный порт:

# tcpdump -i eth1 -c 5 port 80
23:54:24.978612 IP 10.0.0.1.53971 > 10.0.0.50.80: Flags [SEW], seq 53967733, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 256360128 ecr 0,sackOK,eol], length 0 23:54:24.978650 IP 10.0.0.50.80 > 10.0.0.1.53971: Flags [S.E], seq 996967790, ack 53967734, win 28960, options [mss 1460,sackOK,TS val 5625522 ecr 256360128,nop,wscale 6], length 0 23:54:24.978699 IP 10.0.0.1.53972 > 10.0.0.50.80: Flags [SEW], seq 226341105, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 256360128 ecr 0,sackOK,eol], length 0 23:54:24.978711 IP 10.0.0.50.80 > 10.0.0.1.53972: Flags [S.E], seq 1363851389, ack 226341106, win 28960, options [mss 1460,sackOK,TS val 5625522 ecr 256360128,nop,wscale 6], length 0

Фильтр хостов

Для перехвата пакетов, приходящих или исходящих от определенного хоста. Например, IP-адрес 10.0.2.15:

# tcpdump host 10.0.2.15
03:48:06.087509 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 3862934963:3862934999, ack 65355639, win 37232, length 36 03:48:06.087806 IP 10.0.2.2.50225 > 10.0.2.15.22: Flags [.], ack 36, win 65535, length 0 03:48:06.088087 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 36:72, ack 1, win 37232, length 36 03:48:06.088274 IP 10.0.2.2.50225 > 10.0.2.15.22: Flags [.], ack 72, win 65535, length 0 03:48:06.088440 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 72:108, ack 1, win 37232, length 36

Для перехвата пакетов определенных типов протоколов. Например, icmp, на интерфейсе eth1:

# tcpdump -i eth1 icmp
04:03:47.408545 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 75, length 64 04:03:47.408999 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 2812, seq 75, length 64 04:03:48.408697 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 76, length 64 04:03:48.409208 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 2812, seq 76, length 64 04:03:49.411287 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 77, length 64

Комбинирование фильтров

Фильтры можно комбинировать с помощью операторов:

Это позволит писать команды, которые могут более точно изолировать пакеты. Например, пакеты с определенного IP-адреса и для определенного порта:

# tcpdump -n -i eth1 src 10.0.0.1 and dst port 80
00:18:17.155066 IP 10.0.0.1.54222 > 10.0.0.50.80: Flags [F.], seq 500773341, ack 2116767648, win 4117, options [nop,nop,TS val 257786173 ecr 5979014], length 0 00:18:17.155104 IP 10.0.0.1.54225 > 10.0.0.50.80: Flags [S], seq 904045691, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 257786173 ecr 0,sackOK,eol], length 0 00:18:17.157337 IP 10.0.0.1.54221 > 10.0.0.50.80: Flags [P.], seq 4282813257:4282813756, ack 1348066220, win 4111, options [nop,nop,TS val 257786174 ecr 5979015], length 499: HTTP: GET / HTTP/1.1 00:18:17.157366 IP 10.0.0.1.54225 > 10.0.0.50.80: Flags [.], ack 1306947508, win 4117, options [nop,nop,TS val 257786174 ecr 5983566], length 0

Если нужно перехватить все пакеты кроме ICMP, используем оператор NOT:

# tcpdump -i eth1 not icmp

Сохранение заголовков в файл

Вывод tcpdump может довольно быстро перемещаться по экрану. В таких случаях можно сохранить заголовки пакетов в файле с опцией -w. Вывод сохраняется в файлы с расширением .pcap.

Следующая команда сохраняет 10 строк вывода интерфейса eth1 в icmp.pcap.

# tcpdump -i eth1 -c 10 -w icmp.pcap
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes 10 packets captured 10 packets received by filter 0 packets dropped by kernel

Прочитать этот файл можно с помощью опции -r

# tcpdump -i eth1 -c 10 -w icmp.pcap
reading from file icmp.pcap, link-type EN10MB (Ethernet) 05:33:20.852732 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 33, length 64 05:33:20.853245 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 3261, seq 33, length 64 05:33:21.852586 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 34, length 64 05:33:21.853104 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 3261, seq 34, length 64 05:33:22.852615 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 35, length 64

Просмотр сведений о пакете

Пока мы видели только заголовки пакетов, а для просмотра содержимого нужно использовать параметр -A. Вывод содержимого будет в формате ASCII.

С помощью опции -X можно отобразить вывод в шестнадцатеричном формате, правда, это не сильно помогает в тех случаях, когда соединение зашифровано.

# tcpdump -c10 -i eth1 -n -A port 80

Вывод

Утилита tcpdump проста в настройке и освоении. Необходимо лишь немного разобраться с:

После чего tcpdump станет отличным помощником в вопросах обеспечения безопасности вашей сети.

image

  • tcpdump
  • сетевой трафик
  • анализ сетевого трафика
  • безопасность сети
  • безопасность сетей
  • перехват сетевого трафика

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru