Извлечение полей пакетов в Tshark

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь извлекать определенные поля пакетов из сетевого трафика с помощью командной строки инструмента Wireshark - tshark. Вы научитесь выбирать общие поля, такие как исходный IP-адрес (ip.src) и TCP-порт (tcp.port), а также овладеете форматированием вывода с помощью параметра -T fields и настройкой пользовательских разделителей.

В рамках упражнений вы научитесь захватывать пакеты, извлекать поля с использованием флага -e и экспортировать данные в формат CSV. Вы научитесь структурировать вывод для лучшей читаемости и анализа, используя такие методы, как настройка разделителя с помощью -E separator=, и перенаправление вывода.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) wireshark/WiresharkGroup -.-> wireshark/export_packets("Exporting Packets") wireshark/WiresharkGroup -.-> wireshark/packet_analysis("Packet Analysis") wireshark/WiresharkGroup -.-> wireshark/commandline_usage("Command Line Usage") subgraph Lab Skills wireshark/export_packets -.-> lab-548927{{"Извлечение полей пакетов в Tshark"}} wireshark/packet_analysis -.-> lab-548927{{"Извлечение полей пакетов в Tshark"}} wireshark/commandline_usage -.-> lab-548927{{"Извлечение полей пакетов в Tshark"}} end

Выбор полей с помощью -e ip.src -e tcp.port

На этом этапе вы научитесь извлекать определенные поля из сетевых пакетов с использованием командной строки инструмента Wireshark - tshark. Сетевые пакеты содержат множество различных фрагментов информации, и часто нам нужно рассмотреть только определенные поля для анализа. Здесь мы сосредоточимся на двух важных полях: исходный IP-адрес (ip.src), который показывает, откуда пришел пакет, и номер TCP-порта (tcp.port), который идентифицирует конкретную службу или приложение, используемое в данный момент.

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

curl -s http://example.com > /dev/null

Теперь давайте захватим этот трафик с помощью tshark. Следующая команда захватит 10 пакетов и сохранит их в файл с именем sample.pcap. Формат .pcap является стандартным для хранения сетевых захватов:

tshark -c 10 -w sample.pcap

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

tshark -r sample.pcap -T fields -e ip.src -e tcp.port

Разберем, что делает каждая часть этой команды:

  • -r sample.pcap сообщает tshark прочитать данные из нашего файла с захваченными пакетами
  • -T fields указывает, что мы хотим получить вывод в формате полей (в отличие от других форматов, таких как XML или JSON)
  • -e ip.src выбирает поле исходного IP-адреса
  • -e tcp.port выбирает поле номера TCP-порта

Вывод будет представлен в виде значений, разделенных табуляцией, где каждая строка представляет собой пакет и сначала показывает исходный IP, а затем номер порта:

192.168.1.1    443
192.168.1.2    80

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

tshark -r sample.pcap -T fields -e ip.src -e tcp.port > temp.txt
cat temp.txt

Знак > перенаправляет вывод в файл, а команда cat позволяет просмотреть содержимое этого файла. Таким образом, мы получаем постоянную запись отфильтрованных данных, которую можно использовать позже или проанализировать с помощью других инструментов.

Установка формата вывода в виде полей с помощью -T fields

На этом этапе мы узнаем, как настроить вывод tshark так, чтобы он отображал только определенные поля пакетов, которые нам нужны. Опция -T fields преобразует стандартный вид пакетов в структурированный формат, который легче обрабатывать и анализировать.

При первом запуске tshark без указания полей он показывает полный, но иногда перегруженный, вид каждого пакета:

tshark -r sample.pcap -c 3

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

tshark -r sample.pcap -T fields -e frame.number -e ip.src -e ip.dst -e tcp.port

Разберем, что делает каждая часть этой команды:

  • -T fields сообщает tshark, что мы хотим получить вывод в виде полей, а не стандартный обзор пакета
  • -e frame.number извлекает позицию пакета в файле с захваченными данными
  • -e ip.src показывает, откуда пришел пакет (исходный IP-адрес)
  • -e ip.dst показывает, куда направлен пакет (целевой IP-адрес)
  • -e tcp.port показывает, какой сетевой порт используется

Результатом будет чистый вывод, разделенный табуляцией, который выглядит так:

1    192.168.1.1    192.168.1.2    443
2    192.168.1.2    192.168.1.1    80

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

tshark -G fields | grep -E 'ip.src|ip.dst|tcp.port'

Эта команда поможет вам найти все связанные поля для IP-адресов и TCP-портов, которые вы, возможно, захотите включить в свой анализ.

Использование запятой в качестве разделителя с помощью -E separator=

На этом этапе мы научимся изменить разделитель полей в выводе tshark с табуляции на запятую. Это изменение особенно полезно, когда вам нужно импортировать данные в электронные таблицы, такие как Excel, или проанализировать их с помощью инструментов, которые ожидают данные в формате CSV (Comma-Separated Values, значения, разделенные запятыми).

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

tshark -r sample.pcap -T fields -e frame.number -e ip.src -e ip.dst -e tcp.port -c 3

Для преобразования этого вывода в формат CSV мы будем использовать опцию -E с параметром separator=,. Это сообщает tshark использовать запятые вместо табуляций между полями:

tshark -r sample.pcap -T fields -e frame.number -e ip.src -e ip.dst -e tcp.port -E separator=, -c 3

Разберем, что делает каждая часть этой команды:

  • -E separator=, - это ключевое дополнение, которое изменяет разделитель на запятую
  • Все другие опции (-r, -T fields, -e для полей, -c) работают точно так же, как и раньше
  • Порядок опций не имеет значения, главное, чтобы они все были указаны

После выполнения этой команды вы увидите вывод в таком формате:

1,192.168.1.1,192.168.1.2,443
2,192.168.1.2,192.168.1.1,80
3,192.168.1.3,192.168.1.4,22

Для того, чтобы убедиться, что разделитель действительно был изменен на запятую (особенно полезно, если вы не можете визуально отличить табуляцию от пробелов), вы можете передать вывод в команду od -c, которая показывает специальные символы:

tshark -r sample.pcap -T fields -e frame.number -e ip.src -E separator=, -c 1 | od -c

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

Экспорт в файл с использованием > fields.csv

На этом этапе мы узнаем, как сохранить извлеченные данные пакетов в файл в формате CSV (Comma-Separated Values, значения, разделенные запятыми). CSV - это простой формат файлов, который хранит табличные данные в обычном тексте, что делает его идеальным для анализа в электронных таблицах или инструментах обработки данных. Сохраняя данные пакетов в файл, мы создаем постоянную запись, которую можно поделиться, проанализировать или обработать позже.

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

tshark -r sample.pcap -T fields -e frame.number -e ip.src -e ip.dst -e tcp.port -E separator=, > fields.csv

Вот что делает каждая часть этой команды:

  • -r sample.pcap считывает наш файл с захваченными пакетами
  • -T fields сообщает Tshark, что мы хотим получить вывод в виде полей
  • Каждый флаг -e указывает на поле для извлечения (номер пакета, исходный IP-адрес, целевой IP-адрес и порт)
  • -E separator=, устанавливает запятую в качестве разделителя полей
  • > fields.csv перенаправляет вывод в файл вместо отображения на экране

После выполнения этой команды проверим, был ли наш файл создан правильно:

ls -l fields.csv
head fields.csv

Команда ls -l показывает детали файла, а head отображает первые несколько строк. Ваш вывод должен выглядеть примерно так:

1,192.168.1.1,192.168.1.2,443
2,192.168.1.2,192.168.1.1,80
3,192.168.1.3,192.168.1.4,22

Для того чтобы эти данные были более понятными, мы можем добавить заголовки столбцов. Вот как создать новый файл с заголовками и объединить его с нашими данными:

echo "Packet,Source,Destination,Port" > headers.csv
cat headers.csv fields.csv > final.csv
mv final.csv fields.csv

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

Резюме

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

Вы также практиковались в объединении нескольких полей, таких как frame.number, ip.src и tcp.port, в структурированный вывод. Эти методы позволяют эффективно преобразовывать необработанные данные пакетов в организованные форматы, подходящие для устранения неполадок в сети.