Команда Tcpdump в Linux9 мин для чтения
tcpdump – утилита командной строки, которую вы можете использовать для захвата и проверки сетевого трафика, поступающего в вашу систему и из нее Это наиболее часто используемый среди сетевых администраторов инструмент для устранения неполадок в сети и тестирования безопасности.
Несмотря на его название tcpdump, вы также можете захватывать не только TCP-трафик, а и UDP, ARP или ICMP. Захваченные пакеты могут быть записаны в файл или стандартный вывод. Одной из самых мощных функций команды tcpdump является ее способность использовать фильтры и собирать только те данные, которые вы хотите проанализировать.
В этой статье мы рассмотрим основы использования команды tcpdump в Linux.
Установка tcpdump
tcpdump устанавливается по умолчанию в большинстве дистрибутивов Linux и macOS. Чтобы проверить, доступна ли команда tcpdump в вашей системе, введите:
tcpdump --version
Вывод должен выглядеть примерно так:
tcpdump version 4.9.2libpcap version 1.8.1OpenSSL 1.1.1b 26 Feb 2019
Если tcpdump нет в вашей системе, вышеприведенная команда выведет “tcpdump: command not found”. Вы можете легко установить tcpdump, используя менеджер пакетов вашего дистрибутива.
Установка tcpdumpна Ubuntu и Debian
sudo apt update && sudo apt install tcpdump
Установка tcpdumpна CentOS и Fedora
sudo yum install tcpdump
Установка tcpdumpна Arch Linux
sudo pacman -S tcpdump
Захват пакетов с tcpdump
Общий синтаксис команды tcpdump выглядит следующим образом:
tcpdump [options] [expression]
Команда optionsпозволяет вам контролировать поведение команды.
Фильтр expressionопределяет, какие пакеты будут захвачены.
Только root или пользователь с sudoпривилегиями может работать tcpdump. Если вы попытаетесь запустить команду как непривилегированный пользователь, вы получите сообщение об ошибке: “You don’t have permission to capture on that device”.
Самый простой вариант использования – вызвать tcpdump без каких-либо опций и фильтров:
sudo tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes15:47:24.248737 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 201747193:201747301, ack 1226568763, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 10815:47:24.248785 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 108:144, ack 1, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 3615:47:24.248828 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 144:252, ack 1, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 108... Long output suppressed23116 packets captured23300 packets received by filter184 packets dropped by kernel
tcpdump будет продолжать захват пакетов и запись в стандартный вывод, пока не получит сигнал прерывания. Используйте комбинацию клавиш Ctrl+C, чтобы отправить сигнал прерывания и остановить команду.
Для более подробного вывода передайте параметр -v или -vv для еще более подробного вывода:
sudo tcpdump -vv
Вы можете указать количество пакетов для перехвата, используя опцию -c. Например, чтобы захватить только десять пакетов, вы должны набрать:
sudo tcpdump -c 10
После захвата пакетов tcpdump остановится.
Когда интерфейс не указан, tcpdump используется первый найденный интерфейс и дамп всех пакетов, проходящих через этот интерфейс.
Используйте опцию -D, чтобы напечатать список всех доступных сетевых интерфейсов, с которых tcpdump может собирать пакеты:
sudo tcpdump -D
Для каждого интерфейса команда выводит имя интерфейса, краткое описание и связанный индекс (номер):
1.ens3 [Up, Running]2.any (Pseudo-device that captures on all interfaces) [Up, Running]3.lo [Up, Running, Loopback]
Приведенные выше результаты показывают, что ens3 это первый интерфейс, найденный tcpdumpи используемый, когда для команды не предоставлен интерфейс. Второй интерфейс any- это специальное устройство, которое позволяет захватывать все активные интерфейсы.
Чтобы указать интерфейс, на котором вы хотите захватывать трафик, вызовите команду с параметром -i, за которым следует имя интерфейса или связанный индекс. Например, чтобы захватить все пакеты со всех интерфейсов, вы должны указать интерфейс any:
sudo tcpdump -i any
По умолчанию tcpdump выполняет обратное разрешение DNS для IP-адресов и переводит номера портов в имена. Используйте опцию -n, чтобы отключить перевод:
sudo tcpdump -n
Пропуск поиска DNS позволяет избежать генерации трафика DNS и делает вывод более читабельным. Рекомендуется использовать эту опцию каждый раз, когда вы вызываете tcpdump.
Читать Команды break и continue. Оболочка Bash. Linux.
Вместо отображения вывода на экране вы можете перенаправить его в файл, используя операторы перенаправления > и >>:
sudo tcpdump -n -i any > file.out
Вы также можете просмотреть данные при сохранении в файл с помощью команды tee:
sudo tcpdump -n -l | tee file.out
Опция -l в команде выше говорит , tcpdumpчтобы сделать вывод строки в буфер. Когда эта опция не используется, вывод не будет записан на экране при создании новой строки.
Понимание вывода tcpdump
tcpdumpвыводит информацию для каждого захваченного пакета на новой строке. Каждая строка содержит метку времени и информацию об этом пакете, в зависимости от протокола.
Типичный формат строки протокола TCP выглядит следующим образом:
[Timestamp] [Protocol] [Src IP].[Src Port] > [Dst IP].[Dst Port]: [Flags], [Seq], [Ack], [Win Size], [Options], [Data Length]
Давайте посмотрим поле за полем и объясним следующую строку:
15:47:24.248737 IP 192.168.1.185.22 > 192.168.1.150.37445: Flags [P.], seq 201747193:201747301, ack 1226568763, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 108
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. В этом примере [P.] означает пакет Push Acknowledgement, который используется для подтверждения предыдущего пакета и отправки данных. Другие типичные значения полей флага:
[.] – ACK (Подтверждение)
[S] – SYN (Начать соединение)
[P] – PSH (Push-данные)
[F] – FIN (Завершить соединение)
[R] – RST (Сброс соединения)
[S.] – SYN-ACK (Пакет SynAcK)
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-трафика вы будете использовать:
sudo tcpdump -n udp
Другой способ определить протокол – использовать спецификатор proto, за которым следует номер протокола. Следующая команда отфильтрует протокол № 17 и выдаст тот же результат, что и приведенный выше:
sudo tcpdump -n proto 17
Для получения дополнительной информации о номерах, проверьте список номеров протокола IP.
Фильтрация по хосту
Для захвата только пакетов, связанных с конкретным хостом, используйте спецификатор host:
sudo tcpdump -n host 192.168.1.185
Хост может быть либо IP-адресом, либо именем.
Вы также можете отфильтровать выходные данные по заданному диапазону IP-адресов с помощью квалификатора net. Например, для выгрузки только пакетов, связанных с 10.10.0.0/16, используйте:
sudo tcpdump -n net 10.10
Читать Использование команды SCP для безопасной передачи файлов в Linux
Фильтрация по порту
Чтобы ограничить захват только пакетами от определенного порта, используйте классификатор port. Команда ниже захватывает пакеты, связанные со службой SSH (порт 22), с помощью этой команды:
sudo tcpdump -n port 23
Классификатор portrange позволяет захватывать трафик в диапазоне портов:
sudo tcpdump -n portrange 110-150
Фильтрация по источнику и назначению
Вы можете также фильтровать пакеты на основе источника или порта назначения или хост, используя src, dst, src, dst и src или классификатор dst.
Следующая команда перехватывает приходящие пакеты с хоста с IP 192.168.1.185:
sudo tcpdump -n src host 192.168.1.185
Чтобы найти трафик, поступающий из любого источника на порт 80, вы должны использовать:
sudo tcpdump -n dst port 80
Комплексные фильтры
Фильтры можно комбинировать с помощью операторов and( &&), or( ||) и not( !).
Например, чтобы перехватить весь HTTP-трафик с IP-адреса источника 192.168.1.185, вы должны использовать эту команду:
sudo tcpdump -n src 192.168.1.185 and tcp port 80
Вы также можете использовать скобки для группировки и создания более сложных фильтров:
sudo tcpdump -n 'host 192.168.1.185 and (tcp port 80 or tcp port 443)'
Чтобы избежать ошибок синтаксического анализа при использовании специальных символов, заключите фильтры в одинарные кавычки.
Вот еще один пример команды для захвата всего трафика, кроме SSH, с исходного IP-адреса 192.168.1.185:
sudo tcpdump -n src 192.168.1.185 and not dst port 22
Инспекция пакетов
По умолчанию tcpdump захватывает только заголовки пакетов. Однако иногда вам может понадобиться проверить содержимое пакетов.
tcpdump позволяет печатать содержимое пакетов в ASCII и HEX.
Опция -A указывает tcpdump на печать каждого пакета в ASCII и -xв HEX:
sudo tcpdump -n -A
Чтобы показать содержимое пакета в HEX и ASCII, используйте параметр -X:
sudo tcpdump -n -X
Чтение и запись снимков в файл
Еще одна полезная функция tcpdump, это записывать пакеты в файл. Это удобно, когда вы захватываете большое количество пакетов или когда хотите захватить пакеты для последующего анализа.
Чтобы начать запись в файл, используйте параметр -w, за которым следует выходной файл захвата:
sudo tcpdump -n -w data.pcap
Эта команда выше сохранит захват в файл с именем data.pcap. Вы можете назвать файл так, как хотите, но это распространенное соглашение – использовать расширение .pcap (захват пакета).
Когда -wиспользуется опция, вывод не отображается на экране. tcpdumpзаписывает необработанные пакеты и создает двоичный файл, который невозможно прочитать с помощью обычного текстового редактора.
Чтобы проверить содержимое файла, вызовите tcpdump с опцией -r:
sudo tcpdump -r data.pcap
Файл захвата также можно проверить с помощью других инструментов анализа пакетов, таких как Wireshark.
При захвате пакетов в течение длительного периода времени вы можете включить ротацию файлов. tcpdump позволяет создавать новые файлы или вращать файл дампа за указанный промежуток времени или фиксированный размер. Следующая команда будет создавать до десяти 200MB файлов, именованных file.pcap0, file.pcap1 и так далее: перед перезаписью старых файлов.
sudo tcpdump -n -W 10 -C 200 -w /tmp/file.pcap
После создания десяти файлов старые файлы будут перезаписаны.
Обратите внимание, что вы должны работать tcpdumpтолько во время устранения неполадок.
Если вы хотите начать tcpdump в определенное время, вы можете использовать cronjob . tcpdump не имеет возможности выйти через заданное время. Вы можете использовать timeoutкоманду, чтобы остановить tcpdumpчерез некоторое время. Например, чтобы выйти через 5 минут, вы должны использовать:
sudo timeout 300 tcpdump -n -w data.pcap &
Символ амперсанда ( &) в конце команды запускает команду в фоновом режиме.
Вывод
tcpdump является инструментом командной строки для анализа и устранения проблем, связанных с сетью.
Эта статья познакомила вас с основами tcpdumpиспользования и синтаксисом.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник: AndreyEx.ru
The post Команда Tcpdump в Linux9 мин для чтения appeared first on SEO & SMO.
Источник: bestwebber.ru