HTTP Breakout Proxy
Un proxy de intercepción HTTP/HTTPS ligero y herramienta de análisis de tráfico escrito en Go, con una interfaz de usuario basada en web para inspeccionar, filtrar, colorear y anotar el tráfico capturado en tiempo real.


Descripción General
HTTP Breakout Proxy funciona como un proxy MITM HTTP y HTTPS y una herramienta de visualización en vivo.
Captura solicitudes y respuestas entre dos componentes de software, permitiendo a los desarrolladores:
- Inspeccionar cabeceras, cuerpos y detalles de temporización de cada solicitud y respuesta.
- Organizar, filtrar y persistir los datos capturados.
- Resaltar solicitudes basadas en reglas de color definidas por el usuario.
- Pausar o reanudar la captura dinámicamente.
- Ver la temporización de las solicitudes como un diagrama de Gantt para visualizar las fases de rendimiento.
El proxy incluye una interfaz de usuario completa accesible desde cualquier navegador web moderno, permitiendo un análisis inmediato en tiempo real sin herramientas externas.
Características
🔍 Captura e Inspección
- Intercepta tráfico HTTP y HTTPS (con soporte de CA MITM).
- Muestra todos los metadatos, cabeceras y cuerpos de solicitudes y respuestas.
- Soporta truncamiento para cuerpos muy grandes.
💾 Persistencia
- Las capturas y reglas de color se almacenan en
captures.json (o archivo especificado).
- Recarga automáticamente el estado al iniciar y guarda periódicamente en disco.
- Las reglas de color predeterminadas se generan en la primera ejecución si no existen.
🖥️ Interfaz Web
- Interfaz web integrada y responsiva (servida por el propio proxy).
- Muestra las capturas en una lista desplazable con indicadores codificados por color.
- El panel de detalles muestra:
- Cabeceras/cuerpos de solicitud y respuesta
- Desglose de tiempos
- Notas editables
- Gráfico de rendimiento estilo Gantt para las fases de conexión
🎨 Reglas de Color
- Define resaltados de color condicionales para capturas usando una sintaxis de filtro flexible:
- Ejemplo:
status:4 status:5 → resalta errores HTTP
- Ejemplo:
url:/api/ → resalta solicitudes de API
- Ejemplo:
/\.css$/ → coincidencia regex en URL
- Cada regla incluye: nombre, color, expresión de coincidencia, prioridad y nota.
- Gana la coincidencia de mayor prioridad.
- Gestionado interactivamente a través de una interfaz modal con vistas previas en vivo.
- Persistido entre sesiones.
⏸️ Control de Captura
- El botón Pausar/Reanudar permite dejar de recolectar nuevas capturas sin detener el proxy.
- Útil cuando se centra en un conjunto de datos fijo o se aísla un comportamiento específico.
📈 Visualización de Rendimiento
- Cada captura incluye tiempos detallados de conexión:
- Resolución DNS
- Conexión TCP
- Handshake TLS
- Procesamiento del servidor
- Lectura de respuesta
- Mostrado como un diagrama de Gantt en el panel de detalles.
- La escala redondea automáticamente al segundo más cercano para legibilidad.
🧭 Filtrado y Búsqueda
- Caja de filtro en tiempo real que soporta:
- Filtros basados en campos (
method:GET, status:404, header:Content-Type=application/json)
- Expresiones regex (
/login/)
- Términos combinados con semántica AND/OR
- Coincidencia sin distinción de mayúsculas y parcial soportada.
- El filtro se aplica tanto a la lista de capturas como al resaltado de color.
- Historial de búsqueda almacenado localmente en el navegador.
🧹 Gestión
- Eliminar capturas individuales o borrar todas las capturas a través de la interfaz.
- Las reglas y notas se persisten junto con las capturas.
🧩 Utilidades de Exportación
- Copiar una captura como:
- Comando
curl (formateado para terminal)
- Fragmento de código
python requests (representación JSON limpia)
- Descargar cuerpos de respuesta directamente desde la interfaz.
Uso de Línea de Comandos
httpbreakout -l 127.0.0.1:8080
Inicio Rápido
Compilar (desde el código fuente)
git clone https://github.com/jbsouthe/http-breakout-proxy.git
cd http-breakout-proxy
go build -o http-breakout-proxy
Esto produce un único ejecutable que contiene el proxy compilado y los activos de UI integrados.
Ejecutar (predeterminado)
# ejecutar con valores predeterminados (proxy + UI)
./http-breakout-proxy
Por defecto, el binario se vincula a 127.0.0.1:8080 para proxy (y opcionalmente UI — ver banderas CLI). Abra la UI en un navegador para inspeccionar capturas.
Ejemplo: ejercitar el proxy con curl
# enviar una solicitud HTTPS a través del proxy (el proxy escucha en 127.0.0.1:8080)
curl -x http://127.0.0.1:8080 https://example.com
El tráfico capturado aparecerá en la interfaz web.
Argumentos de Línea de Comandos
| Banda | Predeterminado | Descripción |
|---|
-l | 127.0.0.1:8080 | Dirección de escucha del proxy y de la aplicación UI. |
-mitm | true | Habilitar el modo de intercepción HTTPS Man In The Middle (MITM) (genera una CA local para interceptar TLS). |
-ca | ./ca | Directorio donde se almacenan el certificado CA y la clave generados cuando MITM está habilitado y se elige la persistencia. |
-f | ./captures.json | Ruta o directorio opcional para persistir las capturas en disco (por ejemplo, ./captures.json). |
-max-body | 1048576 | Número máximo de bytes (por cuerpo) a almacenar/mostrar; los cuerpos más grandes se truncan con un centinela. |
-buffer-size | 1000 | Capacidad del búfer circular para capturas en memoria. |
-v | false | Habilitar registro detallado para depuración. |
Use ./http-breakout-proxy -h para listar las banderas disponibles y descripciones de uso.
Resumen de la Interfaz Web
La UI está optimizada para flujos de trabajo de investigación.
- Barra de herramientas superior: entrada de filtro global (soporta regex y prefijos con clave), Pausar/Reanudar captura, Limpiar y Ayuda de filtro (se abre en una nueva pestaña).
- Panel izquierdo: lista cronológica de capturas (las más recientes primero). Cada elemento muestra el nombre de la captura; por defecto es
MÉTODO URL [ESTADO] pero se puede asignar un nombre personalizado.
- Panel derecho: detalles de la captura seleccionada:
- Resumen: metadatos, cabeceras y cuerpos (JSON formateado donde corresponda).
- Pestañas Solicitud / Respuesta: cuerpos formateados en bruto.
- Pestaña Bruto: JSON completo de la captura.
- Acciones por fila: copiar como
curl, copiar como Python requests, descargar cuerpo de respuesta, renombrar, eliminar.
Lenguaje de Filtro (Referencia Rápida)