HTTP interception proxy with a terminal-first TUI.
Project description
HexProxy
HexProxy es un proxy HTTP/HTTPS orientado a terminal, escrito en Python y diseñado para trabajar completamente desde una TUI. Su objetivo es ofrecer un flujo de trabajo estilo Burp Suite, pero centrado en consola: captura, interceptación, edición, repetición, exportación de evidencia, persistencia de sesiones y extensibilidad mediante plugins.
Resumen
HexProxy ya cubre un flujo operativo real para análisis de tráfico:
- proxy HTTP funcional con captura de requests y responses
- interceptación de
request,responseo ambas fases - inspección HTTPS mediante MITM local cuando el cliente confía la CA de HexProxy
Repeater,Sitemap,Match/Replace,Export,Scope,Filters,SettingsyKeybindings- workspace HTTP unificado con
RequestyResponsevisibles en la misma pantalla - proyectos persistentes con autosave
- exportación a snippets de desarrollo y transcript HTTP limpio para evidencia
- plugins Python cargables desde archivos locales
- themes globales, incluyendo colores nombrados y colores hex
Características Principales
Flowsen tiempo real con navegación por teclado- visualización simultánea de
RequestyResponsepara el flow seleccionado - detección de tipo de contenido,
raw/pretty, syntax highlighting básico,word wrapy scroll horizontal - decodificación de
chunked,gzip,deflateybrcuando es posible Interceptcon historial persistente en la sesión y resolución fuera de ordenRepeatercon múltiples sesiones y múltiples envíos por sesiónSitemappor host y rutaMatch/Replacepersistente con builder guiado dentro de la TUIScopecon inclusiones y exclusiones explícitas- filtros para limpiar
FlowsySitemap - copia al clipboard desde
Export - documentación de plugins y themes dentro de
Settings
Instalación
Requisitos
- Python
3.12+ opensslenPATHpara generar la CA local y certificados por host- terminal compatible con
curses
Linux / macOS
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
hexproxy --listen-port 8080
Windows
py -m venv .venv
.venv\Scripts\Activate.ps1
pip install -e .
hexproxy --listen-port 8080
Notas de instalación:
- En Windows,
windows-cursesse instala como dependencia del proyecto. - Para MITM HTTPS en Windows también necesitas
openssl.exeaccesible desdePATH. - Para decodificar
brotli, instala opcionalmentebrotli.
También puedes ejecutar el módulo directamente:
PYTHONPATH=src python3 -m hexproxy --listen-port 8080
Inicio Rápido
Levantar el proxy:
hexproxy --listen-port 8080
Levantar el proxy con proyecto persistente:
hexproxy --listen-port 8080 --project projects/demo.hexproxy.json
Cargar plugins adicionales:
hexproxy --plugin-dir plugins --plugin-dir /ruta/a/plugins-extra
Si el puerto solicitado está ocupado, HexProxy intenta puertos cercanos y muestra el puerto final dentro de la TUI.
Opciones CLI
--listen-host: interfaz de escucha--listen-port: puerto del proxy--project: archivo de proyecto para cargar y autosalvar sesiones--plugin-dir: directorio adicional de plugins; se puede repetir--cert-dir: directorio de certificados; por defecto usa una ruta global estable--config-file: archivo de configuración global
Workspaces
1. Overview
Vista principal con la lista de Flows capturados y detalles generales del item seleccionado.
2. Intercept
Permite interceptar:
offrequestresponseboth
Características:
- cola de interceptación resoluble fuera de orden
- historial retenido después de reenviar o descartar
- edición validada de request y response
3. Repeater
Permite cargar un flow, editar el request y reenviarlo manualmente.
Incluye:
- múltiples sesiones
- múltiples envíos por sesión
- historial por sesión
- request editable
- response visible y reutilizable para export
Limitaciones actuales:
- no soporta
CONNECT - no soporta upgrades
WebSocket
4. Sitemap
Construye un árbol por host y ruta usando el tráfico visible actualmente.
Incluye:
- árbol por host
- request y response del item seleccionado
- integración con
Repeater - integración con
ScopeyFilters
5. Match/Replace
Gestiona reglas persistentes para modificar requests y responses.
Incluye:
- builder guiado dentro de la TUI
- edición de reglas existentes
- eliminación de reglas
- soporte
literalyregex - scope de regla
request,responseoboth
6 y 7. HTTP Workspace
Los atajos 6 y 7 abren el mismo workspace HTTP:
6: abre el workspace con foco enRequest7: abre el mismo workspace con foco enResponse
La pantalla muestra al mismo tiempo:
Flowsa la izquierdaRequestarriba a la derechaResponseabajo a la derecha
Cada panel soporta:
- scroll vertical
- scroll horizontal cuando
word wrapestá apagado raw/pretty- syntax highlighting básico
Tipos soportados por el viewer:
JSONXMLHTMLapplication/x-www-form-urlencodedJavaScriptCSS- texto plano
- binarios en
hexdump
8. Export
Genera snippets y transcripts desde el flow, item interceptado o sesión de repeater actual.
Formatos disponibles:
HTTP request + responsePython requestscurl (bash)curl (windows)Node.js fetchGo net/httpPHP cURLRust reqwest
También soporta:
- copia directa al clipboard
word wrap- scroll horizontal
- syntax highlighting básico
Settings
Settings está organizado por secciones:
AppearanceExtensionsTLSTrafficControls
Desde ahí puedes abrir o ejecutar:
ThemesPluginsPlugin Developer Docs- generar o regenerar certificados
ScopeFiltersKeybindings
Scope
Workspace interactivo para gestionar:
- patrones in-scope
- patrones out-of-scope
- altas, edición y borrado sin salir de la TUI
Filters
Workspace interactivo para controlar qué aparece en Flows y Sitemap.
Filtros actuales:
- mostrar u ocultar tráfico fuera de scope
- requests con query, sin query o ambos
- tráfico con body, sin body o ambos
- fallos: todos, solo fallos, ocultar fallos,
4xx,5xx, errores de conexión - allowlist de métodos HTTP
- denylist de métodos HTTP
- extensiones ocultas como
jpg,png,js,css,woff, etc.
Keybindings
Workspace interactivo para editar atajos globales.
Características:
- bindings persistentes para toda la aplicación
- secuencias de uno o dos caracteres
- validación contra duplicados
- validación contra combinaciones ambiguas
HTTPS, Certificados Y Navegadores
HexProxy puede inspeccionar HTTPS mediante MITM local.
Flujo:
- HexProxy genera una CA local
- el cliente debe confiar esa CA
- el navegador o cliente debe usar HexProxy como proxy HTTP explícito
La CA puede:
- generarse o regenerarse desde
Settings - descargarse desde la página local servida por HexProxy
Rutas útiles:
http://127.0.0.1:PUERTO/http://localhost:PUERTO/http://hexproxy/cuando el navegador ya usa HexProxy como proxyhttp://127.0.0.1:PUERTO/cert
Ubicación por defecto de certificados:
- Linux/macOS:
~/.config/hexproxy/certs/ - Windows:
%APPDATA%\hexproxy\certs\
Notas importantes:
- si regeneras la CA, debes volver a importarla en el cliente
- Firefox debe configurarse como
HTTP Proxy, noHTTPS Proxy - si el cliente no confía la CA, el MITM HTTPS fallará
Scope
El scope controla qué hosts quedan permitidos para interceptación.
Comportamiento:
- si el scope está vacío, toda la captura puede entrar al interceptor
- si el scope tiene entradas, solo los hosts permitidos se interceptan
- el tráfico fuera de scope puede seguir mostrándose o ocultarse desde
Filters
Patrones soportados:
example.com: coincide conexample.comy subdominios*.example.com: coincide solo con subdominios!test.example.com: excluye un host concreto!*.internal.example.com: excluye subdominios concretos*: coincide con todo
También puedes añadir el host actual al scope desde:
FlowsSitemap- el workspace HTTP
Proyectos Y Persistencia
Si usas --project, HexProxy persiste:
- flows capturados
- requests y responses
- reglas de
Match/Replace - scope
- filtros de vista
Comportamiento:
- si el archivo existe, se carga
- si no existe, se crea uno nuevo
- cada cambio importante se autosalva
- puedes forzar guardado manual
- si no iniciaste con
--project, HexProxy puede pedir nombre o ruta al guardar
Keybindings Por Defecto
Workspaces:
1:Overview2:Intercept3:Repeater4:Sitemap5:Match/Replace6:HTTPcon foco en request7:HTTPcon foco en response8:Exportw:Settings0:Keybindings
Acciones principales:
a: enviar enInterceptyRepeater, o copiar enExporte: editar item actualx: descartar, borrar o cancelar según el workspacey: mandar el flow actual aRepeaterA: agregar host actual al scopep: alternarraw/prettyz: alternarword wrapo: alternar visibilidad fuera de scope
Archivo global de configuración:
- Linux/macOS:
~/.config/hexproxy/config.json - Windows:
%APPDATA%\hexproxy\config.json
Themes
HexProxy incluye themes built-in y soporta themes personalizados.
Themes incorporados:
defaultamberoceanforestmono
Ubicación de themes custom:
- Linux/macOS:
~/.config/hexproxy/themes/ - Windows:
%APPDATA%\hexproxy\themes\
Formato JSON:
{
"name": "sunset",
"description": "Warm custom palette",
"extends": "default",
"colors": {
"chrome": { "fg": "#1d3557", "bg": "#f1c40f" },
"accent": { "fg": "red", "bg": "default" },
"keyword": { "fg": "#ff8800", "bg": "default" }
}
}
Claves soportadas:
name: nombre único del themedescription: descripción opcionalextends: theme base, por defectodefaultcolors: overrides por rol
Roles soportados:
chromeselectionsuccesserrorwarningaccentkeywordinfo
Valores de color soportados:
defaultblackredgreenyellowbluemagentacyanwhite#RGB#RRGGBB
Notas sobre hex:
- HexProxy acepta hex colors en el JSON.
- En runtime, la TUI los aproxima al color de terminal más cercano soportado por
curses. - Esto mantiene compatibilidad con terminales básicas sin perder expresividad en la definición del theme.
Plugins
HexProxy carga plugins Python desde:
plugins/si existe- cualquier directorio indicado con
--plugin-dir
Reglas del loader:
- se cargan archivos
*.py - archivos que comienzan con
_se ignoran - el módulo puede exportar
register(api),register(),PLUGINocontribute(api)
Capacidades de la API v2:
- hooks de tráfico para request/response/error
- workspaces propios
- paneles dentro de workspaces propios y paneles en workspaces integrados
- exporters adicionales
- keybindings configurables
- analyzers
- metadata visible en la TUI
- campos en
Settings - estado global y por proyecto para plugins
Ejemplo:
def register(api):
api.add_workspace("demo_workspace", "Demo", "Workspace de plugin", shortcut="dw")
api.add_panel(
"demo_workspace",
"summary",
"Summary",
render_lines=lambda context: ["Plugin workspace activo"],
)
return DemoPlugin()
Referencias:
Nota de runtime:
- la metadata de plugins persistida por flow se almacena como strings
- para guardar estructuras debes usar
json.dumps(...)al escribir yjson.loads(...)al leer
Compatibilidad De Plataforma
HexProxy ya contempla:
- rutas globales por plataforma para config, themes y certificados
- instalación de
windows-cursesen Windows - integración de clipboard para Linux, macOS y Windows
Aun así, el flujo más validado sigue siendo Unix-like. En Windows el soporte está presente en la base del proyecto, pero conviene validar terminal, openssl y clipboard en tu entorno real.
Limitaciones Actuales
- soporte
WebSocketlimitado al túnel tras101 Switching Protocols Repeaterno soportaCONNECT- el rendering y clipboard dependen de lo que soporte tu terminal
Desarrollo
Ejecutar tests:
PYTHONPATH=src .venv/bin/python -m unittest discover -s tests -v
Verificación rápida de sintaxis:
python3 -m compileall src tests
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hexproxy-0.2.3.tar.gz.
File metadata
- Download URL: hexproxy-0.2.3.tar.gz
- Upload date:
- Size: 133.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30b868dc04b63871a37e7445ad925fca02fa082d62162309cb30b69ac9828c48
|
|
| MD5 |
1a39dd13f20782e61f0ef1d72b632d40
|
|
| BLAKE2b-256 |
07be85e8a68d02faca2096627d733fbd12f443e21172f582b781413fd3a9334e
|
Provenance
The following attestation bundles were made for hexproxy-0.2.3.tar.gz:
Publisher:
release.yml on Secure-Hex/HexProxy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hexproxy-0.2.3.tar.gz -
Subject digest:
30b868dc04b63871a37e7445ad925fca02fa082d62162309cb30b69ac9828c48 - Sigstore transparency entry: 1280417669
- Sigstore integration time:
-
Permalink:
Secure-Hex/HexProxy@10f209211979582468135d51d7d090568fa96e6d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Secure-Hex
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@10f209211979582468135d51d7d090568fa96e6d -
Trigger Event:
push
-
Statement type:
File details
Details for the file hexproxy-0.2.3-py3-none-any.whl.
File metadata
- Download URL: hexproxy-0.2.3-py3-none-any.whl
- Upload date:
- Size: 113.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df0149cce74542db87c71e8c22480bb16672c81f21e0e370c23bbfced5d3b25a
|
|
| MD5 |
e53cdf17c5d39965725cb8661fc4115f
|
|
| BLAKE2b-256 |
12049c3dcb58ac2646c2a1ebee9cfb5a85a2c3bc92b7aef37f96e32d264ddf3d
|
Provenance
The following attestation bundles were made for hexproxy-0.2.3-py3-none-any.whl:
Publisher:
release.yml on Secure-Hex/HexProxy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hexproxy-0.2.3-py3-none-any.whl -
Subject digest:
df0149cce74542db87c71e8c22480bb16672c81f21e0e370c23bbfced5d3b25a - Sigstore transparency entry: 1280417672
- Sigstore integration time:
-
Permalink:
Secure-Hex/HexProxy@10f209211979582468135d51d7d090568fa96e6d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Secure-Hex
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@10f209211979582468135d51d7d090568fa96e6d -
Trigger Event:
push
-
Statement type: