Профилирование производительности Tshark

WiresharkBeginner
Практиковаться сейчас

Введение

В этом лабораторном занятии вы научитесь профилировать и анализировать производительность командной строки tshark из пакета Wireshark, используя измерения времени и методы обработки пакетов. Вы узнаете, как включить подробную статистику времени с помощью параметра --print-timers, обрабатывать файлы с захваченными пакетами и интерпретировать выходные данные в формате JSON, чтобы понять различные этапы обработки.

В ходе практических упражнений вы научитесь измерять время обработки, фильтровать определенные типы трафика и анализировать метрики производительности. В рамках лабораторного занятия вы получите практический опыт работы с командами tshark для подсчета пакетов и изучения DHCP-трафика, одновременно профилируя производительность Wireshark.

Включить таймеры с помощью --print-timers

На этом этапе мы узнаем, как измерять производительность обработки пакетов в Wireshark с использованием параметра --print-timers. Это особенно полезно, когда вы хотите понять, на каких задачах Tshark тратит больше всего времени при анализе сетевого трафика.

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

cd ~/project

Параметр --print-timers сообщает Tshark отслеживать и отображать, сколько времени он тратит на разные задачи при обработке пакетов. Попробуем использовать его с примером захвата DHCP-трафика, который идет в комплекте с Wireshark:

tshark --print-timers -r /usr/share/wireshark/example_captures/dhcp.pcap

После выполнения этой команды вы увидите выходные данные, похожие на следующие:

Timer 1: 0.000000 seconds
Timer 2: 0.000123 seconds
...

Эти таймеры представляют различные этапы обработки пакетов. Чтобы сосредоточиться на одном конкретном таймере, можно использовать grep для фильтрации выходных данных. Например, чтобы увидеть только результаты Timer 1:

tshark --print-timers -r /usr/share/wireshark/example_captures/dhcp.pcap | grep "Timer 1"

Вот, что обычно измеряют основные таймеры:

  • Timer 1: Время, затраченное на чтение файла с захваченными пакетами с диска
  • Timer 2: Время, затраченное на обработку и декодирование пакетов
  • Timer 3: Время, затраченное на применение фильтров отображения (если они используются)

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

Обработать файл с помощью -r capture.pcap

На этом этапе вы научитесь обрабатывать файлы с захваченными пакетами с использованием командной строки tshark из пакета Wireshark с параметром -r. Это необходимо для анализа предварительно записанного сетевого трафика, хранящегося в файлах формата .pcap, которые представляют собой бинарные файлы, содержащие захваченные сетевые пакеты.

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

    cd ~/project
    
  2. Рассмотрим пример файла с захваченным DHCP-трафиком, который идет в комплекте с установкой Wireshark. DHCP (Dynamic Host Configuration Protocol, Протокол динамической настройки хоста) - это сетевой протокол, используемый для автоматического назначения IP-адресов устройствам. Флаг -r сообщает tshark прочитать данные из указанного файла:

    tshark -r /usr/share/wireshark/example_captures/dhcp.pcap
    
  3. В выходных данных каждый пакет отображается с базовой информацией в столбцах:

    • Номер пакета
    • Метка времени (секунды с начала захвата)
    • IP-адреса источника и назначения (Source → Destination)
    • Протокол (в данном случае DHCP)
    • Длина пакета
    • Информация, специфичная для протокола
    1 0.000000 192.168.0.1 → 192.168.0.10 DHCP 342 DHCP Discover - Transaction ID 0x7c3e0c29
    2 0.023512 192.168.0.10 → 192.168.0.1 DHCP 342 DHCP Offer - Transaction ID 0x7c3e0c29
    ...
    
  4. Чтобы подсчитать общее количество пакетов в файле с захваченными данными, мы передаем (|) выходные данные tshark в команду wc -l, которая подсчитывает количество строк. Каждый пакет отображается в одной строке:

    tshark -r /usr/share/wireshark/example_captures/dhcp.pcap | wc -l
    
  5. Для более глубокого анализа можно использовать флаг -V (verbose, подробный вывод), чтобы показать все доступные детали пакета. Поскольку это генерирует большое количество выходных данных, мы используем head -20, чтобы показать только первые 20 строк:

    tshark -r /usr/share/wireshark/example_captures/dhcp.pcap -V | head -20
    

Фильтровать TCP с помощью -Y "tcp"

На этом этапе вы научитесь фильтровать TCP-трафик с использованием параметра -Y для фильтрации отображения в Wireshark. TCP (Transmission Control Protocol, Протокол управления передачей) является одним из основных протоколов сетевого взаимодействия, ответственным за надежную доставку данных. Фильтр -Y позволяет выделить TCP-пакеты из общего сетевого трафика, что необходимо при анализе веб-браузинга, передачи файлов или других приложений, работающих на основе TCP.

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

    cd ~/project
    
  2. Теперь применим базовый фильтр TCP к нашему примеру файла с захваченными данными. Флаг -r указывает входной файл, а -Y "tcp" сообщает tshark отображать только TCP-пакеты:

    tshark -r /usr/share/wireshark/example_captures/http.pcap -Y "tcp"
    
  3. В выходных данных будут отображены только TCP-пакеты, показывающие рукопожатие TCP (SYN, SYN-ACK) и последующие передачи данных. Каждая строка представляет TCP-пакет с его номером последовательности, размером окна и флагами:

    1 0.000000 192.168.1.100 → 192.168.1.1 TCP 74 49278 → 80 [SYN] Seq=0 Win=64240 Len=0
    2 0.000042 192.168.1.1 → 192.168.1.100 TCP 74 80 → 49278 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0
    ...
    
  4. Если вы хотите просто подсчитать, сколько TCP-пакетов содержится в файле с захваченными данными, можно передать выходные данные в команду wc -l. Это полезно для быстрой статистики:

    tshark -r /usr/share/wireshark/example_captures/http.pcap -Y "tcp" | wc -l
    
  5. Для более целенаправленного анализа можно фильтровать TCP-трафик по определенным портам. В этом примере отображается только трафик на порту 80 (HTTP). Обратите внимание, что мы используем tcp.port вместо просто tcp для указания номера порта:

    tshark -r /usr/share/wireshark/example_captures/http.pcap -Y "tcp.port == 80"
    

Анализ JSON-вывода по времени

На этом этапе мы рассмотрим, как Wireshark записывает информацию о времени в формате JSON. JSON (JavaScript Object Notation, Объектная нотация JavaScript) - это легковесный формат данных, который легко читается человеком и парсится машинами. Мы объединим навыки захвата и фильтрации пакетов из предыдущих этапов, чтобы сгенерировать осмысленную статистику о времени.

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

cd ~/project

Теперь сгенерируем данные о времени конкретно для TCP-пакетов. Флаг --print-timers сообщает Tshark включить информацию о времени в выходных данных, а -T json форматирует их в виде JSON. Мы сохраняем это в файл для дальнейшего анализа:

tshark -r /usr/share/wireshark/example_captures/http.pcap -Y "tcp" --print-timers -T json > tcp_timings.json

Посмотрим быстро на структуру нашего JSON-вывода. Команда head показывает первые 20 строк, что помогает нам понять, как организованы данные, прежде чем мы будем их дальше обрабатывать:

head -20 tcp_timings.json

Для эффективной работы с данными в формате JSON мы будем использовать jq, мощный командный JSON-процессор. Если у вас его еще нет установлено, эта команда установит его:

sudo apt-get install -y jq

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

jq '.[].timers' tcp_timings.json | head -10

Наконец, давайте создадим более цельный обзор, который показывает только номера пакетов и соответствующие им времена обработки. Это дает нам ясное представление о том, сколько времени ушло на обработку каждого пакета:

jq '.[].timers | {packet_number: .packet_num, processing_time: .processing_time}' tcp_timings.json | head -5

Резюме

В этом лабораторном занятии вы научились профилировать производительность Tshark с использованием параметра --print-timers для анализа этапов обработки, таких как чтение файла и обработка пакетов. В упражнениях показано, как интерпретировать статистику времени для оптимизации рабочих процессов сетевого анализа.

Вы также отработали основные техники анализа пакетов, включая обработку файлов с захваченными данными с помощью -r, изучение содержимого пакетов и использование подробного режима. В рамках лабораторной работы была получена практическая работа с примерами файлов Wireshark для развития базовых навыков анализа сетевого трафика.