Фильтрация HTTP-трафика в Tshark

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

Введение

В этом практическом занятии (лабораторной работе) вы научитесь фильтровать и анализировать HTTP-трафик с использованием Tshark, командной строковой утилиты Wireshark. Вы будете практиковать захват веб-трафика на порту 80 и выделение HTTP-запросов с помощью специальных фильтрационных методов.

В упражнениях вас будут руководить по извлечению HTTP-методов (GET/POST) и форматированию вывода в формате JSON для структурированного анализа. Эти навыки являются важными для решения проблем в сети и инспекции трафика.

Захват HTTP с использованием -f "tcp port 80"

На этом этапе вы научитесь захватывать HTTP-трафик с использованием фильтра отображения Wireshark -f "tcp port 80". HTTP (Hypertext Transfer Protocol, Протокол передачи гипертекста) является основой для передачи данных в Всемирной паутине и обычно использует порт 80 для незашифрованного веб-трафика. Этот фильтр позволяет выделить HTTP-трафик среди других сетевых протоколов, упрощая анализ веб-коммуникаций.

Прежде чем приступить, разберемся с некоторыми основами:

  • Сетевые порты можно представить как двери, через которые определенные типы сетевого трафика входят и выходят.
  • Порт 80 является стандартным портом, назначенным для HTTP-трафика.
  • Wireshark может фильтровать трафик на основе номеров этих портов.

Сначала откроем Wireshark в среде виртуальной машины LabEx. Следуйте этим шагам внимательно:

  1. Откройте терминал на рабочем столе Xfce (вы можете найти его в меню Приложения > Система > Терминал).
  2. Перейдите в каталог по умолчанию, где мы будем хранить наши файлы с захваченным трафиком:
cd ~/project
  1. Запустите Wireshark с фильтром отображения для HTTP-трафика:
sudo wireshark -k -f "tcp port 80"

Разберем параметры этой команды:

  • -k: Это сообщает Wireshark немедленно начать захватывать пакеты.
  • -f "tcp port 80": Это наш фильтр захвата, который информирует Wireshark записывать только TCP-трафик, направленный на порт 80 или исходящий с него.

Теперь нам нужно создать некоторый HTTP-трафик для анализа. Откройте другое окно терминала (вы можете щелкнуть правой кнопкой мыши по рабочему столу и выбрать "Открыть терминал") и сгенерируйте тестовый трафик с помощью следующей команды:

curl http://example.com

В окне Wireshark вы увидите захваченные пакеты, которые показывают:

  1. HTTP-запрос вашего компьютера к example.com (обычно начинающийся с "GET / HTTP/1.1").
  2. Ответ веб-сервера (обычно содержащий "HTTP/1.1 200 OK").

Каждый пакет содержит важные детали, такие как:

  • IP-адреса источника и назначения.
  • Протокол (HTTP).
  • Размер пакета.
  • Информация о времени.

Для начинающих: Wireshark можно сравнить с микроскопом для сетевого трафика. Фильтр tcp port 80 работает как специальная линза, которая показывает только веб-трафик, игнорируя другие типы сетевой коммуникации. Такой фокусированный взгляд помогает понять, как веб-браузеры и серверы общаются между собой, не перегружаясь информацией о другой сетевой активности.

Фильтрация запросов с использованием -Y "http.request"

На этом этапе вы научитесь фильтровать HTTP-запросы с использованием фильтра отображения Wireshark -Y "http.request". Этот фильтр позволяет сосредоточиться именно на пакетах HTTP-запросов, исключая ответы и другой сетевой трафик. Понимание HTTP-запросов является фундаментом для анализа веб-трафика, так как они представляют собой исходные сообщения, отправляемые клиентами на серверы.

Построив на предыдущем этапе, где мы захватили HTTP-трафик, давайте теперь отфильтруем только HTTP-запросы:

  1. Сначала убедитесь, что вы находитесь в каталоге по умолчанию, где будем работать с нашими файлами с захваченным трафиком:
cd ~/project
  1. Запустите Wireshark с фильтром отображения для HTTP-запросов:
sudo wireshark -k -Y "http.request"

Опция -Y применяет фильтр отображения (отличающийся от фильтра захвата -f, использованного на первом этапе). В то время как фильтры захвата ограничивают то, что записывается, фильтры отображения помогают анализировать уже захваченные данные. Этот конкретный фильтр будет показывать только пакеты, содержащие HTTP-запросы.

  1. Чтобы сгенерировать тестовый трафик для анализа, откройте другой терминал и запустите эти распространенные команды HTTP-клиента:
curl http://example.com
wget http://example.com

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

В окне Wireshark теперь вы должны увидеть только пакеты HTTP-запросов от команд curl и wget. Каждый пакет будет отображать важную информацию о протоколе HTTP, включая:

  • HTTP-метод (GET, POST и т.д.), который указывает тип запроса.
  • Запрашиваемый URI, показывающий конкретный ресурс, к которому осуществляется доступ.
  • Версию HTTP (например, HTTP/1.1), показывающую версию протокола.
  • Информацию о хосте, идентифицирующую целевой сервер.

Извлечение метода с использованием -e http.request.method

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

Прежде чем начать, разберемся, с чем мы будем работать:

  • HTTP-методы являются основными компонентами веб-коммуникаций.
  • Tshark позволяет нам напрямую изучать эти методы из захваченных сетевых пакетов.
  • Флаг -e позволяет нам извлекать определенные поля из данных пакета.

Пройдемся по процессу шаг за шагом:

  1. Сначала нам нужно перейти в правильный рабочий каталог, где хранятся наши файлы с захваченным трафиком:
cd ~/project
  1. Теперь мы запустим команду tshark для извлечения HTTP-методов из активного трафика:
sudo tshark -Y "http.request" -T fields -e http.request.method

Разберем эту команду:

  • sudo: Дает нам необходимые разрешения для захвата сетевого трафика.
  • tshark: Командная строковая версия Wireshark.
  • -Y "http.request": Применяет фильтр отображения, чтобы показать только HTTP-запросы.
  • -T fields: Указывает, что мы хотим получить вывод в виде полей (а не полные пакеты).
  • -e http.request.method: Сообщает tshark извлечь только поле HTTP-метода.
  1. Чтобы увидеть это в действии, мы сгенерируем некоторый тестовый трафик из другого окна терминала:
curl -X GET http://example.com
curl -X POST http://example.com
curl -X DELETE http://example.com

Каждая из этих команд curl отправляет другой HTTP-метод на example.com, который tshark захватит и отобразит. Флаг -X в curl позволяет нам указать, какой HTTP-метод использовать.

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

GET
POST
DELETE

Этот вывод показывает, какие именно HTTP-методы были использованы в захваченном трафике, что упрощает анализ шаблонов веб-запросов. Названия методов появляются в порядке, в котором они были захвачены tshark.

Отображение в формате JSON с использованием -T json

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

Прежде чем начать, разберемся, почему вывод в формате JSON ценен:

  • Структурированная организация данных.
  • Простая интеграция с другими инструментами и скриптами.
  • Стандартизированный формат обмена данными.
  1. Сначала убедитесь, что вы находитесь в каталоге по умолчанию, где будем запускать наши команды:
cd ~/project
  1. Теперь запустим Tshark для захвата HTTP-запросов и вывода их в формате JSON. Эта команда объединяет фильтрацию и форматирование в JSON:
sudo tshark -Y "http.request" -T json -e http.request.method -e http.host -e http.request.uri

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

  • -Y "http.request": Этот фильтр сообщает Tshark показывать только пакеты HTTP-запросов.
  • -T json: Указывает, что мы хотим получить вывод в формате JSON.
  • -e поля: Они извлекают определенные части информации из каждого HTTP-запроса:
    • http.request.method: Используемый HTTP-метод (GET, POST и т.д.).
    • http.host: Домен веб-сайта, к которому осуществляется доступ.
    • http.request.uri: Конкретный путь или ресурс, на который делается запрос.
  1. Чтобы сгенерировать тестовый трафик для захвата, откройте второе окно терминала и запустите эти команды curl:
curl http://example.com
curl http://example.org/sample

Когда вы запустите команду Tshark во время генерации этого тестового трафика, вы увидите вывод в таком формате:

[
  {
    "_index": "packets-1",
    "_source": {
      "layers": {
        "http.request.method": ["GET"],
        "http.host": ["example.com"],
        "http.request.uri": ["/"]
      }
    }
  },
  {
    "_index": "packets-2",
    "_source": {
      "layers": {
        "http.request.method": ["GET"],
        "http.host": ["example.org"],
        "http.request.uri": ["/sample"]
      }
    }
  }
]

Обратите внимание, как каждый HTTP-запрос становится отдельным JSON-объектом с четко помеченными полями. Эта структура позволяет легко определить:

  • Какой веб-сайт был посещен.
  • Какой тип запроса был сделан.
  • Какую конкретную страницу или ресурс был запрошен.

Формат JSON особенно полезен, когда вы хотите сохранить эти данные для последующего анализа или передать их в другие инструменты, которые могут автоматически обрабатывать данные в формате JSON.

Резюме

В этом практическом занятии вы научились фильтровать и анализировать HTTP-трафик с помощью командной строки Tshark из Wireshark. В рамках упражнений вы узнали, как захватывать HTTP-трафик с использованием -f "tcp port 80" и генерировать тестовый трафик с помощью curl для практического анализа.

Вы также отработали навыки фильтрации HTTP-запросов с помощью -Y "http.request" и извлечения определенных данных, таких как HTTP-методы, с использованием -e http.request.method. В рамках практического занятия показано, как форматировать вывод в формате JSON с помощью -T json, что дает вам ключевые методы для эффективного анализа сетевого трафика.