- Команда tcpdump в Linux
- Установка tcpdump
- Установка tcpdump в Ubuntu и Debian
- Установка tcpdump на CentOS и Fedora
- Установка tcpdump в Arch Linux
- Захват пакетов с помощью tcpdump
- Понимание вывода tcpdump
- tcpdump фильтры
- Фильтрация по протоколу
- Фильтрация по хосту
- Фильтрация по порту
- Фильтрация по источнику и назначению
- Комплексные фильтры
- Инспекция пакетов
- Чтение и запись снимков в файл
- Выводы
- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- Захват пакетов с tcpdump: руководство с примерами
- Установка Tcpdump
- Захват пакетов с Tcpdump
- Понимание формата вывода
- Фильтрация пакетов
- Протокол
- IP адрес или имя хоста отправителя или получателя
- Сложные выражения
- Проверка содержимого пакета
- Сохранение файл
- Заключение
Команда tcpdump в Linux
tcpdump — это утилита командной строки, которую вы можете использовать для захвата и проверки сетевого трафика, идущего в вашу систему и из нее. Это наиболее часто используемый сетевыми администраторами инструмент для устранения неполадок в сети и тестирования безопасности.
Несмотря на название, с помощью tcpdump вы также можете захватывать не-TCP трафик, такой как UDP, ARP или ICMP. Перехваченные пакеты можно записать в файл или на стандартный вывод. Одной из самых мощных функций команды tcpdump является ее способность использовать фильтры и собирать только те данные, которые вы хотите анализировать.
В этой статье мы рассмотрим основы использования команды tcpdump в Linux.
Установка tcpdump
tcpdump установлен по умолчанию в большинстве дистрибутивов Linux и macOS. Чтобы проверить, доступна ли команда tcpdump в вашей системе, введите:
Результат должен выглядеть примерно так:
Если tcpdump отсутствует в вашей системе, приведенная выше команда напечатает «tcpdump: команда не найдена». Вы можете легко установить tcpdump с помощью диспетчера пакетов вашего дистрибутива.
Установка tcpdump в Ubuntu и Debian
Установка tcpdump на CentOS и Fedora
Установка tcpdump в Arch Linux
Захват пакетов с помощью tcpdump
Общий синтаксис команды tcpdump следующий:
- Команда options позволяет управлять поведением команды.
- expression фильтра определяет, какие пакеты будут захвачены.
Только root или пользователь с привилегиями sudo может запускать tcpdump . Если вы попытаетесь запустить команду от имени непривилегированного пользователя, вы получите сообщение об ошибке: «У вас нет разрешения на захват на этом устройстве».
Самый простой вариант использования — вызвать tcpdump без каких-либо опций и фильтров:
tcpdump будет продолжать захватывать пакеты и записывать их на стандартный вывод, пока не получит сигнал прерывания. Используйте Ctrl+C чтобы отправить сигнал прерывания и остановить команду.
Для более подробного вывода передайте параметр -v или -vv для более подробного вывода:
Вы можете указать количество пакетов для захвата с помощью опции -c . Например, чтобы захватить только десять пакетов, введите:
После захвата пакетов tcpdump остановится.
Если интерфейс не указан, tcpdump использует первый найденный интерфейс и выгружает все пакеты, проходящие через этот интерфейс.
Используйте параметр -D чтобы распечатать список всех доступных сетевых интерфейсов, с которых tcpdump может собирать пакеты:
Для каждого интерфейса команда выводит имя интерфейса, краткое описание и соответствующий индекс (номер):
Приведенные выше выходные данные показывают, что ens3 — это первый интерфейс, обнаруженный tcpdump и используемый, когда команде не предоставлен интерфейс. Второй интерфейс any — это специальное устройство, позволяющее захватывать все активные интерфейсы.
Чтобы указать интерфейс, на котором вы хотите перехватывать трафик, вызовите команду с параметром -i за которым следует имя интерфейса или связанный индекс. Например, чтобы захватить все пакеты со всех интерфейсов, вы должны указать any интерфейс:
По умолчанию tcpdump выполняет обратное разрешение DNS для IP-адресов и переводит номера портов в имена. Используйте параметр -n чтобы отключить перевод:
Пропуск поиска DNS позволяет избежать генерации трафика DNS и делает вывод более читаемым. Рекомендуется использовать эту опцию всякий раз, когда вы вызываете tcpdump .
Вместо отображения вывода на экране вы можете перенаправить его в файл с помощью операторов перенаправления > и >> :
Вы также можете просматривать данные при сохранении в файл с помощью команды tee :
Параметр -l в приведенной выше команде сообщает tcpdump о необходимости буферизации выходной строки. Если этот параметр не используется, вывод не будет записан на экране при создании новой строки.
Понимание вывода tcpdump
tcpdump выводит информацию для каждого захваченного пакета в новой строке. Каждая строка включает метку времени и информацию об этом пакете в зависимости от протокола.
Типичный формат строки протокола TCP выглядит следующим образом:
Пойдем по полю и объясним следующую строку:
15:47:24.248737 — 15:47:24.248737 метка захваченного пакета 15:47:24.248737 по местному времени и использует следующий формат: hours:minutes:seconds.frac , где frac — доли секунды с полуночи.
IP — пакетный протокол. В данном случае IP означает Интернет-протокол версии 4 (IPv4).
192.168.1.185.22 — IP-адрес и порт источника, разделенные точкой ( . ).
192.168.1.150.37445 — IP-адрес и порт назначения, разделенные точкой ( . ).
Flags [P.] — поле TCP Flags. В этом примере [P.] означает пакет подтверждения push, который используется для подтверждения предыдущего пакета и отправки данных. Другие типичные значения поля флага следующие:
- [.] — ACK (подтверждение)
- [S] — SYN (Начать соединение)
- [P] — PSH (Push-данные)
- [F] — FIN (Завершить соединение)
- [R] — RST (сбросить соединение)
- [S.] — SYN-ACK (пакет SynAcK)
seq 201747193:201747301 — Порядковый номер находится в seq 201747193:201747301 first:last . Он показывает количество данных, содержащихся в пакете. За исключением первого пакета в потоке данных, где эти числа являются абсолютными, все последующие пакеты используются как относительные позиции байтов. В этом примере номер 201747193:201747301 , что означает, что этот пакет содержит байты от 201747193 до 201747301 потока данных. Используйте параметр -S для вывода абсолютных порядковых номеров.
ack 1226568763 Номер подтверждения — это порядковый номер следующих данных, ожидаемых на другом конце этого соединения.
win 402 — Номер окна — это количество доступных байтов в приемном буфере.
options [nop,nop,TS val 1051794587 ecr 2679218230] — параметры TCP. nop , или «нет операции» — это заполнение, используемое для того, чтобы сделать заголовок TCP кратным 4 байтам. TS val — это временная метка TCP, а ecr — эхо-ответ. Посетите документацию IANA для получения дополнительной информации о параметрах TCP.
length 108 — длина данных полезной нагрузки
tcpdump фильтры
Когда tcpdump вызывается без фильтров, он захватывает весь трафик и производит огромное количество выходных данных, что очень затрудняет поиск и анализ интересующих пакетов.
Фильтры — одна из самых мощных функций команды tcpdump . Они позволяют захватывать только те пакеты, которые соответствуют выражению. Например, при устранении проблем, связанных с веб-сервером, вы можете использовать фильтры для получения только HTTP-трафика.
tcpdump использует синтаксис Berkeley Packet Filter (BPF) для фильтрации перехваченных пакетов с использованием различных параметров обработки, таких как протоколы, IP-адреса и порты источника и назначения и т. д.
В этой статье мы рассмотрим некоторые из наиболее распространенных фильтров. Список всех доступных фильтров можно найти на странице руководства pcap-filter .
Фильтрация по протоколу
Чтобы ограничить захват определенным протоколом, укажите этот протокол как фильтр. Например, чтобы захватить только трафик UDP, вы должны запустить:
Другой способ определить протокол — использовать квалификатор proto , за которым следует номер протокола. Следующая команда отфильтрует протокол номер 17 и выдаст тот же результат, что и приведенный выше:
Для получения дополнительной информации о числах проверьте список номеров IP-протоколов .
Фильтрация по хосту
Чтобы захватить только пакеты, относящиеся к определенному хосту, используйте квалификатор host :
Хостом может быть IP-адрес или имя.
Вы также можете фильтровать вывод по заданному диапазону IP-адресов, используя квалификатор net . Например, чтобы выгрузить только пакеты, относящиеся к 10.10.0.0/16 вы должны использовать:
Фильтрация по порту
Чтобы ограничить захват только пакетами от или к определенному порту, используйте квалификатор port . Приведенная ниже команда захватывает пакеты, связанные со службой SSH (порт 22), с помощью этой команды:
portrange позволяет захватывать трафик в диапазоне портов:
Фильтрация по источнику и назначению
Вы также можете фильтровать пакеты на основе порта или хоста источника или назначения, используя квалификаторы are src , dst , src and dst , а также src or dst .
Следующая команда захватывает приходящие пакеты от хоста с IP 192.168.1.185:
Чтобы найти трафик, поступающий из любого источника на порт 80, вы должны использовать:
Комплексные фильтры
Фильтры можно комбинировать с помощью операторов and ( && ), or ( || ), но not ( ! ).
Например, чтобы захватить весь HTTP-трафик, поступающий с исходного IP-адреса 192.168.1.185, вы должны использовать эту команду:
Вы также можете использовать круглые скобки для группировки и создания более сложных фильтров:
Чтобы избежать ошибок синтаксического анализа при использовании специальных символов, заключайте фильтры в одинарные кавычки.
Вот еще один пример команды для захвата всего трафика, кроме SSH, с исходного IP-адреса 192.168.1.185:
Инспекция пакетов
По умолчанию tcpdump захватывает только заголовки пакетов. Однако иногда вам может потребоваться проверить содержимое пакетов.
tcpdump позволяет печатать содержимое пакетов в ASCII и HEX.
Параметр -A указывает tcpdump печатать каждый пакет в ASCII и -x в HEX:
Чтобы показать содержимое пакета как в HEX, так и в ASCII, используйте параметр -X :
Чтение и запись снимков в файл
Еще одна полезная функция tcpdump — записывать пакеты в файл. Это удобно, когда вы захватываете большое количество пакетов или захватываете пакеты для последующего анализа.
Чтобы начать запись в файл, используйте параметр -w за которым следует выходной файл захвата:
Эта команда выше сохранит захват в файл с именем data.pcap . Вы можете назвать файл по .pcap , но обычно используется расширение .pcap (захват пакетов).
Когда используется опция -w , вывод не отображается на экране. tcpdump записывает необработанные пакеты и создает двоичный файл, который невозможно прочитать обычным текстовым редактором.
Чтобы проверить содержимое файла, вызовите tcpdump с параметром -r :
Если вы хотите запустить tcpdump в фоновом режиме , добавьте символ амперсанда ( & ) в конце команды.
Файл захвата также можно проверить с помощью других инструментов анализатора пакетов, таких как Wireshark.
При захвате пакетов в течение длительного периода времени вы можете включить ротацию файлов. tcpdump позволяет создавать новые файлы и вращать файл дампа через указанный интервал времени или фиксированного размера. Следующая команда создаст до десяти файлов размером 200 file.pcap0 именами file.pcap0 , file.pcap1 и т. Д. Перед перезаписью старых файлов.
После создания десяти файлов старые файлы будут перезаписаны.
Обратите внимание, что запускать tcpdump только во время устранения неполадок.
Если вы хотите запустить tcpdump в определенное время, вы можете использовать cronjob . tcpdump не имеет возможности выйти через заданное время. Вы можете использовать команду timeout чтобы остановить tcpdump через некоторое время. Например, чтобы выйти через 5 минут, вы должны использовать:
Выводы
tcpdump — это инструмент командной строки для анализа и устранения проблем, связанных с сетью.
Эта статья познакомила вас с основами использования и синтаксиса tcpdump . Для получения более подробной документации посетите веб-сайт tcpdump .
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Захват пакетов с tcpdump: руководство с примерами
Gotta Catch ‘Em All!
22 минуты чтения
Tcpdump — это утилита командной строки, которая позволяет вам захватывать и анализировать сетевой трафик, проходящий через вашу систему. Он часто используется для устранения неполадок в сети, а также для обеспечения безопасности.
Мини — курс по виртуализации
Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена
Это мощный и универсальный инструмент, который включает в себя множество опций и фильтров. Поскольку это инструмент командной строки, он идеально подходит для работы на удаленных серверах или устройствах, для которых GUI недоступен, для сбора данных, которые могут быть проанализированы позже, поскольку результаты можно сохранять в отдельный файл. Он также может быть запущен в фоновом режиме или как запланированное задание с использованием таких инструментов, как cron.
В этой статье мы рассмотрим некоторые из наиболее распространенных функций tcpdump.
Установка Tcpdump
Tcpdump включен в несколько дистрибутивов Linux, так что скорее всего, он у вас уже установлен. Проверьте, установлен ли tcpdump в вашей системе, например, с помощью команды which :
Мы должны получить примерно такой вывод:
Если tcpdump не установлен, вы можете установить его, но используя менеджер пакетов вашего дистрибутива.
В CentOS или Red Hat Enterprise Linux:
Для Ubuntu and Debian:
Tcpdump требует libpcap , который является библиотекой для захвата сетевых пакетов. Если он не установлен, он будет автоматически добавлен как зависимость.
Захват пакетов с Tcpdump
Синтаксис Tcpdump выглядит следующим образом:
- Команда options позволяют вам контролировать поведение команды.
- Фильтр expression определяет какие пакеты будут захвачены
Для захвата пакетов для траблшутинга или анализа tcpdump требуются повышенные разрешения, поэтому в следующих примерах большинство команд имеют префикс sudo.
Для начала используйте команду tcpdump -D , чтобы увидеть, какие интерфейсы доступны для захвата:
В приведенном выше примере вы можете увидеть все интерфейсы, доступные на компьютере. Специальный интерфейс any позволяет захватывать на всех активных интерфейсах.
Давайте использовать его, чтобы поймать немного пакетов:
Ключ -i показывает что мы захватываем пакеты с определенного (хоть и псевдо) интерфейса. Вы можете прервать захват, нажав Ctrl + C .
Как вы видите, мы перехватили OVER 9000 пакетов. Но так много нам не нужно Чтобы ограничить количество перехваченных пакетов и остановить tcpdump, используйте параметр -c :
В этом случае tcpdump прекратил захват автоматически после захвата пяти пакетов. Это полезно в разных сценариях — например, если вы устраняете неполадки с подключением и захватываете несколько начальных пакетов, этого достаточно. Это еще более полезно, когда мы применяем фильтры для захвата определенных пакетов.
По умолчанию tcpdump разрешает (ресолвит) IP-адреса и порты в имена, как показано в предыдущем примере. Однако при устранении неполадок в сети часто проще использовать IP-адреса и номера портов. Отключите разрешение имен, используя опцию -n и разрешение портов с -nn :
Как показано выше, вывод захвата теперь отображает IP-адреса и номера портов. Это также не позволяет tcpdump выдавать DNS-запросы, что помогает снизить сетевой трафик при устранении неполадок в сети.
Теперь, когда вы можете захватывать сетевые пакеты, давайте рассмотрим, что означает этот вывод.
Понимание формата вывода
Tcpdump способен захватывать и декодировать множество различных протоколов, таких как TCP, UDP, ICMP и многие другие. Хотя мы не можем охватить все их здесь, чтобы помочь вам начать, давайте рассмотрим пакет TCP. Вы можете найти более подробную информацию о различных форматах протокола на страницах руководства tcpdump. Типичный пакет TCP, захваченный tcpdump, выглядит следующим образом:
Поля могут различаться в зависимости от типа отправляемого пакета, но общий формат tcpdump выглядит так:
- Первое поле, 08:41:13.729687 , представляет метку времени полученного пакета согласно местным часам, в формате часы:минуты:секунды.фракция где фракция — доли секунды с полуночи.
- Затем IP представляет протокол сетевого уровня — в данном случае IPv4. Для пакетов IPv6 это значение IP6.
- Следующее поле, 192.168.64.28.22 , — это IP-адрес и порт источника. Далее следуют IP-адрес и порт назначения (разделенные точкой), представленные как 192.168.64.1.41916 .
- После источника и назначения вы можете найти флаги TCP Flags [P.] . Типичные значения для этого поля включают в себя:
- [.] — ACK (Acknowledgment)
- [S] — SYN (Start Connection)
- [P] — PSH (Push Data)
- [F] — FIN (Finish Connection)
- [R] — RST (Reset Connection)
- [S.] — SYN-ACK (SynAcK Packet)
- Далее идет порядковый номер данных, содержащихся в пакете. Для первого захваченного пакета это абсолютное число. Последующие пакеты используют относительное число, чтобы упростить отслеживание. В этом примере последовательность seq 196:568 , что означает, что этот пакет содержит байты с 196 по 568 этого потока.
- За этим следует номер подтверждения: ack 1 . В данном случае это 1, поскольку сторона отправляет данные. Для стороны, получающей данные, это поле представляет следующий ожидаемый байт (данные) в этом потоке. Например, номер Ack для следующего пакета в этом потоке будет 568.
- Следующее поле — это размер окна win 309 , который представляет количество байтов, доступных в приемном буфере, за которыми следуют такие параметры TCP, как MSS (максимальный размер сегмента — Maximum Segment Size) или масштаб окна. nop — заполнение, используемое для того, чтобы сделать заголовок TCP кратным 4 байтам. TS val — это временная метка TCP. ecr — обозначает эхо-ответ.
- Наконец, у нас есть длина пакета, length 372 , которая представляет длину в байтах данных полезной нагрузки. Длина — это разница между последним и первым байтами порядкового номера.
Теперь давайте узнаем, как фильтровать пакеты, чтобы сузить результаты и упростить устранение конкретных проблем.
Фильтрация пакетов
Как упоминалось выше, tcpdump может перехватывать слишком много пакетов, некоторые из которых даже не связаны с проблемой, которую вы устраняете. Например, если вы устраняете проблему с подключением к веб-серверу, вас не интересует трафик SSH, поэтому удаление пакетов SSH из выходных данных облегчает работу с реальной проблемой.
Одной из самых мощных функций tcpdump является его способность фильтровать захваченные пакеты с использованием различных параметров, таких как IP-адреса источника и назначения, порты, протоколы и так далее. Давайте рассмотрим некоторые из наиболее распространенных.
Протокол
Для фильтрации пакетов на основе протокола, указав протокол в командной строке. Например, перехватывайте ICMP-пакеты только с помощью этой команды:
В другом терминале попробуйте пропинговать другой компьютер:
Вернувшись в захват tcpdump, обратите внимание, что tcpdump захватывает и отображает только пакеты, связанные с ICMP. В этом случае tcpdump не отображает пакеты разрешения имен, которые были сгенерированы при разрешении имени wiki.merionet.ru:
Либо, если вы знаете идентификатор протокола, то вы можете использовать фильтр proto . Например, для OSFP пакетов:
Ограничьте захват только пакетами, относящимися к определенному хосту, используя фильтр host :
В этом примере tcpdump захватывает и отображает только пакеты с хоста 54.204.39.132 и на него.
Также можно фильтровать не только по одному хосту, но и по целым подсетям. Для этого нужно использовать фильтр net . Например, чтобы вывести только пакеты, относящиеся только к 192.168.1.0/24, нужно использовать:
Для фильтрации пакетов на основе желаемой услуги или порта используйте фильтр port . Например, перехватите пакеты, относящиеся к веб-службе HTTP c 80 порта, с помощью этой команды:
Чтобы захватывать траффик с диапазона портов используйте фильтр portrange , после которого через дефис укажите желаемый диапазон:
IP адрес или имя хоста отправителя или получателя
Вы также можете фильтровать пакеты на основе IP-адреса источника или назначения или имени хоста при помощи фильтра src , после которого нужно указать адрес отправителя. Например, для захвата пакетов с хоста 192.168.122.98:
Обратите внимание, что tcpdump захватывает пакеты с исходящим IP-адресом 192.168.122.98 для нескольких служб, таких как разрешение имен (порт 53) и HTTP (порт 80). Пакеты ответов не отображаются, так как их исходный IP адрес у них отличается.
И наоборот, вы можете использовать фильтр dst для фильтрации по IP-адресу или имени хоста:
Сложные выражения
Вы также можете комбинировать фильтры с помощью логических операторов and , or и not для создания более сложных выражений. Например, чтобы отфильтровать пакеты с IP-адреса источника 192.168.122.98 и только служебного HTTP, используйте эту команду:
Вы можете создавать более сложные выражения, группируя фильтр с круглыми скобками. В этом случае заключите все выражение фильтра в кавычки, чтобы оболочка не перепутала их с выражениями оболочки:
В этом примере мы фильтруем пакеты только для службы HTTP (порт 80) и исходящих IP-адресов 192.168.122.98 или 54.204.39.132. Это быстрый способ изучения обеих сторон одного и того же потока.
Проверка содержимого пакета
В предыдущих примерах мы проверяли только заголовки пакетов на наличие информации, такой как источник, адресаты, порты и так далее. Иногда это все, что нам нужно для устранения проблем с сетевым подключением. Однако иногда нам необходимо проверить содержимое пакета, чтобы убедиться, что в отправляемом сообщении содержится то, что нам нужно, или что мы получили ожидаемый ответ. Чтобы увидеть содержимое пакета, tcpdump предоставляет два дополнительных флага: -X для печати содержимого в шестнадцатеричном формате (HEX) и -A для печати содержимого в ASCII.
Например, проверьте HTTP-содержимое веб-запроса следующим образом:
Это полезно для устранения проблем с вызовами API, при условии, что вызовы используют простой HTTP. Для зашифрованных соединений этот вывод менее полезен.
Сохранение файл
Другая полезная функция, предоставляемая tcpdump, — это возможность сохранять захват в файл, чтобы вы могли проанализировать результаты позже. Это позволяет вам захватывать пакеты в пакетном режиме, например, ночью и проверять результаты утром. Это также помогает, когда слишком много пакетов для анализа, поскольку захват в реальном времени может происходить слишком быстро.
Чтобы сохранить пакеты в файл, а не отображать их на экране, используйте параметр -w :
Эта команда сохраняет выходные данные в файле с именем webserver.pcap . Расширение .pcap расшифровывается как «packet capture» и является соглашением для этого формата файла.
Как показано в этом примере, на экране ничего не отображается, и захват завершается после захвата 10 пакетов, согласно опции -c10 . Если вы хотите получить обратную связь, чтобы гарантировать захват пакетов, используйте опцию -v .
Tcpdump создает файл в двоичном формате, поэтому вы не можете просто открыть его в текстовом редакторе. Чтобы прочитать содержимое файла, выполните tcpdump с опцией -r :
Поскольку вы больше не захватываете пакеты непосредственно из сетевого интерфейса, sudo не требуется для чтения файла.
Вы также можете использовать любой из фильтров, которые мы обсуждали, чтобы отфильтровать содержимое из файла, так же, как и с данными в реальном времени. Например, проверьте пакеты в файле захвата с исходящего IP-адреса 54.204.39.132, выполнив эту команду:
Если вы хотите запустить tcpdump в фоновом режиме, добавьте & в конце команды.
Заключение
Эти основные функции tcpdump помогут вам начать работу с этим мощным и универсальным инструментом. Чтобы узнать больше, посетите веб-сайт tcpdump и справочные страницы.
Интерфейс командной строки tcpdump обеспечивает большую гибкость для захвата и анализа сетевого трафика. Если вам нужен графический инструмент для понимания более сложных потоков, посмотрите на Wireshark.
Одним из преимуществ Wireshark является то, что он может читать файлы .pcap, захваченные tcpdump. Вы можете использовать tcpdump для захвата пакетов на удаленной машине, у которой нет графического интерфейса пользователя, и проанализировать файл результатов с помощью Wireshark.
Мини — курс по виртуализации
Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена
Источник