HTTP Breakout Proxy
Легковесный HTTP/HTTPS-прокси-перехватчик и инструмент анализа трафика, написанный на Go, с веб-интерфейсом для просмотра, фильтрации, окраски и аннотации захваченного трафика в реальном времени.


Обзор
HTTP Breakout Proxy работает одновременно как HTTP/HTTPS MITM-прокси и инструмент визуализации в реальном времени.
Он перехватывает запросы и ответы между двумя программными компонентами, позволяя разработчикам:
- Просматривать заголовки, тела и временные характеристики каждого запроса и ответа.
- Организовывать, фильтровать и сохранять перехваченные данные.
- Выделять запросы на основе пользовательских правил окраски.
- Динамически приостанавливать или возобновлять захват.
- Просматривать временные характеристики запроса в виде диаграммы Ганта для анализа фаз производительности.
Прокси включает полнофункциональный веб-интерфейс, доступный из любого современного веб-браузера, что позволяет немедленно анализировать данные без внешних инструментов.
Возможности
🔍 Захват и просмотр
- Перехватывает как HTTP-, так и HTTPS-трафик (с поддержкой MITM-сертификата УЦ).
- Отображает все метаданные, заголовки и тела запросов и ответов.
- Поддерживает обрезку очень больших тел.
💾 Сохранение
- Захваченные данные и правила окраски хранятся в файле
captures.json (или указанном файле).
- Автоматически загружает состояние при запуске и периодически сохраняет на диск.
- Правила окраски по умолчанию создаются при первом запуске, если их нет.
🖥️ Веб-интерфейс
- Адаптивный встроенный веб-интерфейс (обслуживается самим прокси).
- Отображает захваченные данные в прокручиваемом списке с цветными индикаторами.
- Панель деталей показывает:
- Заголовки и тела запросов/ответов
- Разбивку по времени
- Редактируемые заметки
- Диаграмму Ганта для фаз соединения
🎨 Правила окраски
- Определяйте условные цветные выделения для захваченных данных с помощью гибкого синтаксиса фильтров:
- Пример:
status:4 status:5 → выделяет ошибки HTTP
- Пример:
url:/api/ → выделяет API-запросы
- Пример:
/\.css$/ → регулярное выражение для URL
- Каждое правило включает:
- Имя, цвет, выражение совпадения, приоритет и заметку
- Побеждает совпадение с наивысшим приоритетом.
- Управляется интерактивно через модальный интерфейс с предпросмотром.
- Сохраняется между сеансами.
⏸️ Управление захватом
- Кнопка Пауза/Возобновить позволяет остановить сбор новых захватов без остановки прокси.
- Полезно для работы с фиксированным набором данных или изоляции определённого поведения.
📈 Визуализация производительности
- Каждый захват включает детальные временные характеристики соединения:
- DNS-запрос
- TCP-соединение
- TLS-рукопожатие
- Обработка на сервере
- Чтение ответа
- Отображается в виде диаграммы Ганта на панели деталей.
- Масштаб автоматически округляется до ближайшей секунды для удобства чтения.
🧭 Фильтрация и поиск
- Окно фильтрации в реальном времени, поддерживающее:
- Фильтры по полям (
method:GET, status:404, header:Content-Type=application/json)
- Регулярные выражения (
/login/)
- Комбинации условий с семантикой И/ИЛИ
- Регистронезависимое и частичное совпадение.
- Фильтр применяется как к списку захватов, так и к цветовой подсветке.
- История поиска хранится локально в браузере.
🧹 Управление
- Удаление отдельных захватов или очистка всех захватов через интерфейс.
- Правила и заметки сохраняются вместе с захватами.
🧩 Утилиты экспорта
- Скопировать захват как:
- команду
curl (форматированную для терминала)
- фрагмент кода
python requests (чистое представление JSON)
- Скачивание тел ответов непосредственно из интерфейса.
Использование командной строки
httpbreakout -l 127.0.0.1:8080
Быстрый старт
Сборка (из исходников)
git clone https://github.com/jbsouthe/http-breakout-proxy.git
cd http-breakout-proxy
go build -o http-breakout-proxy
В результате получается один исполняемый файл, содержащий скомпилированный прокси и встроенные ресурсы веб-интерфейса.
Запуск (по умолчанию)
# запуск с настройками по умолчанию (прокси + интерфейс)
./http-breakout-proxy
По умолчанию двоичный файл привязывается к 127.0.0.1:8080 для прокси (и опционально интерфейса — см. флаги CLI). Откройте интерфейс в браузере для просмотра захватов.
Пример: использование прокси с curl
# отправить HTTPS-запрос через прокси (прокси слушает на 127.0.0.1:8080)
curl -x http://127.0.0.1:8080 https://example.com
Захваченный трафик появится в веб-интерфейсе.
Аргументы командной строки
| Флаг | Значение по умолчанию | Описание |
|---|
-l | 127.0.0.1:8080 | Адрес, на котором прокси слушает; также используется для веб-интерфейса. |
-mitm | true | Включить режим HTTPS-перехвата "Человек посередине" (MITM) (генерирует локальный УЦ для TLS-перехвата). |
-ca | ./ca | Каталог, в котором хранятся сгенерированные сертификат и ключ УЦ, когда MITM включён и выбрано сохранение. |
-f | ./captures.json | Путь или каталог для сохранения захватов на диск (например, ./captures.json). |
-max-body | 1048576 | Максимальное количество байт (на тело) для хранения/отображения; большие тела обрезаются с маркером. |
-buffer-size | 1000 | Ёмкость кольцевого буфера для захватов в памяти. |
-v | false | Включить подробное логирование для отладки. |
Используйте ./http-breakout-proxy -h для просмотра списка доступных флагов и описаний.
Обзор веб-интерфейса
Интерфейс оптимизирован для аналитических рабочих процессов.
- Верхняя панель инструментов: глобальное поле ввода фильтра (поддерживает регулярные выражения и ключевые префиксы), кнопки Пауза/Возобновление захвата, Очистить и Справка по фильтру (открывается в новой вкладке).
- Левая панель: хронологический список захватов (новые вверху). Каждый элемент показывает имя захвата; по умолчанию это
МЕТОД URL [СТАТУС], но можно назначить пользовательское имя.
- Правая панель: детали выбранного захвата:
- Обзор: метаданные, заголовки и тела (форматированный JSON, где применимо).
- Вкладки Запрос / Ответ: необработанные форматированные тела.
- Вкладка Сырые данные: полный JSON захвата.
- Действия со строками: копировать как
curl, копировать как Python requests, скачать тело ответа, переименовать, удалить.
Язык фильтров (краткая справка)
- Обычный токен: ищет везде (метод, URL, статус, хост, заголовки, тела).
- Префиксы:
method:, status:, host:, url:, body:, req.body:, resp.body:, header:, req.header:, resp.header:.
- Синтаксис регулярных выражений:
/шаблон/флаги (например /bearer\\s+\\S+/i).
- Спецификация заголовка:
header:имя=значение где имя или значение могут быть регулярными выражениями.
- Условия комбинируются с логическим И по умолчанию (через пробел). При желании можно переключиться на ИЛИ, изменив логику клиента.