- Команда tcpdump для начинающих
- Команда tcpdump
- Q1. Как использовать tcpdump?
- Q2. Как заставить tcpdump завершить работу после получения заданного количества пакетов?
- Q3. Как сделать так, чтобы tcpdump отображал заголовок уровня ссылки в выводе?
- Q4. Как сделать так, чтобы tcpdump отображал иностранные IP-адреса численно?
- Q5. Как заставить tcpdump выдавать номера пакетов в выводе?
- Q6. Как сделать вывод tcpdump более коротким?
- Q7. Как убрать информацию о временных метках из вывода tcpdump?
- Q8. Как заставить tcpdump производить детальный вывод?
- Заключение
- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- Захват пакетов с tcpdump: руководство с примерами
- Установка Tcpdump
- Захват пакетов с Tcpdump
- Понимание формата вывода
- Фильтрация пакетов
- Протокол
- IP адрес или имя хоста отправителя или получателя
- Сложные выражения
- Проверка содержимого пакета
- Сохранение файл
- Заключение
Команда tcpdump для начинающих
Оригинал: Linux tcpdump Command Tutorial for Beginners (8 Examples)
Автор: Himanshu Arora
Дата публикации: 17 октября 2018 года
Перевод: А. Кривошей
Дата перевода: август 2019 г.
Каждый раз, когда вы открываете веб-страницу на своем компьютере, через сетевой интерфейс отправляются и принимаются пакеты данных. Иногда анализ этих пакетов становится важным по многим причинам. К счастью, Linux предлагает утилиту командной строки, которая выводит информацию, связанную с этими пакетами данных.
В этой статье мы обсудим основы использования рассматриваемой утилиты — tcpdump. Необходимо отметить, что все приведенные здесь примеры были протестированы на машине с Ubuntu 18.04 LTS.
Команда tcpdump
Команда tcpdump в Linux позволяет вам выводить сетевой трафик. Ниже приводится ее краткий синтаксис:
А вот детальный синтаксис:
И вот как справочная страница утилиты описывает ее:
Tcpdump выводит описание содержимого пакетов на сетевом интерфейсе, которые соответствуют логическому выражению; описанию предшествует отметка времени, отображаемая по умолчанию в виде часов, минут, секунд и долей секунды с полуночи.
Его также можно запустить с флагом -w, который заставляет ее сохранять данные в файл для последующего анализа, и/или с флагом -r, который заставляет ее читать из сохраненного файла прежде, чем читать пакеты с сетевого интерфейса. Его также можно запустить с флагом -V, который заставляет ее читать список сохраненных файлов.
Во всех случаях tcpdump будет обрабатывать только пакеты, которые соответствуют логическому выражению.
Ниже приведены примеры в стиле вопросов и ответов, которые должны дать вам лучшее представление о том, как работает команда tcpdump.
Q1. Как использовать tcpdump?
Прежде чем использовать tcpdump для перехвата пакетов данных, в идеале вы должны знать, на каком сетевом интерфейсе вы хотите запустить ее. Для получения списка сетевых интерфейсов, доступных в системе, используйте параметр командной строки -D.
Вот как справочная страница описывает эту опцию:
Выводит список сетевых интерфейсов, доступных в системе и для которых tcpdump может захватывать пакеты. Для каждого сетевого интерфейса выводятся номер и имя интерфейса, за которым, возможно, следует текстовое описание интерфейса. Имя или номер интерфейса можно указать после флага -i, чтобы задать интерфейс для захвата.
Это может быть полезно в системах, в которых нет команды для их перечисления (например, в системах Windows или системах UNIX, в которых отсутствует ifconfig -a); число может быть полезно в Windows 2000 и более поздних системах, где имя интерфейса представляет собой довольно сложную строку.
Флаг -D не будет поддерживаться, если tcpdump был собран с более старой версией libpcap, в которой нет функции pcap_findalldevs ().
Например, в моем случае был получен следующий вывод:
Теперь, когда у вас есть список интерфейсов, вы можете выбрать один из них и передать его имя в качестве входных данных параметру командной строки -i команды tcpdump. Например:
Далее часть вывода, произведенного этой командой в моем случае:
Q2. Как заставить tcpdump завершить работу после получения заданного количества пакетов?
Это может быть достигнуто с помощью параметра командной строки -c. Например, если вы хотите, чтобы tcpdump отображал только информацию, связанную с 10 пакетами, вы можете сделать это следующим образом:
Например, в моем случае я выполнил следующую команду:
Ниже приводится ее вывод:
Таким образом, вы можете увидеть, что были захвачены 10 пакетов.
Q3. Как сделать так, чтобы tcpdump отображал заголовок уровня ссылки в выводе?
Это можно сделать с помощью параметра командной строки -e. Например:
И вот результат:
Таким образом, вы можете видеть, что в выводе были созданы заголовки уровня ссылки.
Q4. Как сделать так, чтобы tcpdump отображал иностранные IP-адреса численно?
Это может быть достигнуто с помощью параметра командной строки -f.
Отображение в tcpdump «чужих» IPv4-адресов в числовом, а не в символьном смысле имеет свои преимущества в определенных ситуациях. Один такой пример упоминается в справочной странице утилиты:
Эта опция предназначена для того, чтобы обойти серьезные неполадки на сервере NIS от Sun — обычно он зависает навсегда при попытке трансляции нелокальных численные IP-адреса.
Q5. Как заставить tcpdump выдавать номера пакетов в выводе?
Чтобы заставить tcpdump выдавать номера пакетов в выводе, используйте параметр командной строки —number.
Например, я выполнил следующую команду:
И вот часть вывода:
Итак, теперь вы можете видеть, что каждая строка начинается с номера.
Q6. Как сделать вывод tcpdump более коротким?
Это можно сделать с помощью параметра командной строки -q. Вот как это объясняется на справочной странице утилиты:
Быстрый (тихий?) вывод. Выводите меньше протокольной информации, чтобы строки были короче.
Ниже приведен пример этой опции:
Таким образом, вы можете видеть, что на этот раз в выводе было меньше информации.
Q7. Как убрать информацию о временных метках из вывода tcpdump?
Для этого используйте параметр командной строки -t. Вот пример команды:
Таким образом, вы можете видеть, что информация о временной метке (которая обычно находится в начале каждой строки) сейчас отсутствует.
Q8. Как заставить tcpdump производить детальный вывод?
В этом случае вы можете использовать параметр командной строки -v. Ниже описано, как справочная страница утилиты объясняет эту опцию:
Производится более подробный вывод. Например, выводятся время жизни, идентификатор, общая длина и опции IP-пакета. Также команда включает дополнительные проверки целостности пакета, такие как проверка контрольной суммы заголовка IP и ICMP.
Заключение
Мы только что коснулись этой темы, поскольку команда tcpdump предлагает множество параметров командной строки. Чтобы познакомиться с ними поближе, вы можете перейти на справочную страницу утилиты.
Источник
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Захват пакетов с tcpdump: руководство с примерами
Gotta Catch ‘Em All!
22 минуты чтения
Tcpdump — это утилита командной строки, которая позволяет вам захватывать и анализировать сетевой трафик, проходящий через вашу систему. Он часто используется для устранения неполадок в сети, а также для обеспечения безопасности.
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
Это мощный и универсальный инструмент, который включает в себя множество опций и фильтров. Поскольку это инструмент командной строки, он идеально подходит для работы на удаленных серверах или устройствах, для которых 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.
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
Источник