hexproxy 0.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hexproxy-0.2.2/LICENSE +37 -0
- hexproxy-0.2.2/PKG-INFO +556 -0
- hexproxy-0.2.2/README.md +524 -0
- hexproxy-0.2.2/pyproject.toml +86 -0
- hexproxy-0.2.2/setup.cfg +4 -0
- hexproxy-0.2.2/src/hexproxy/__init__.py +7 -0
- hexproxy-0.2.2/src/hexproxy/__main__.py +5 -0
- hexproxy-0.2.2/src/hexproxy/app.py +192 -0
- hexproxy-0.2.2/src/hexproxy/bodyview.py +435 -0
- hexproxy-0.2.2/src/hexproxy/certs.py +222 -0
- hexproxy-0.2.2/src/hexproxy/clipboard.py +89 -0
- hexproxy-0.2.2/src/hexproxy/extensions.py +739 -0
- hexproxy-0.2.2/src/hexproxy/mcp.py +2114 -0
- hexproxy-0.2.2/src/hexproxy/models.py +72 -0
- hexproxy-0.2.2/src/hexproxy/preferences.py +131 -0
- hexproxy-0.2.2/src/hexproxy/proxy.py +1178 -0
- hexproxy-0.2.2/src/hexproxy/store.py +1001 -0
- hexproxy-0.2.2/src/hexproxy/themes.py +274 -0
- hexproxy-0.2.2/src/hexproxy/tui.py +8796 -0
- hexproxy-0.2.2/src/hexproxy.egg-info/PKG-INFO +556 -0
- hexproxy-0.2.2/src/hexproxy.egg-info/SOURCES.txt +30 -0
- hexproxy-0.2.2/src/hexproxy.egg-info/dependency_links.txt +1 -0
- hexproxy-0.2.2/src/hexproxy.egg-info/entry_points.txt +2 -0
- hexproxy-0.2.2/src/hexproxy.egg-info/requires.txt +9 -0
- hexproxy-0.2.2/src/hexproxy.egg-info/top_level.txt +1 -0
- hexproxy-0.2.2/tests/test_app.py +127 -0
- hexproxy-0.2.2/tests/test_bodyview.py +319 -0
- hexproxy-0.2.2/tests/test_clipboard.py +44 -0
- hexproxy-0.2.2/tests/test_extensions.py +214 -0
- hexproxy-0.2.2/tests/test_proxy.py +639 -0
- hexproxy-0.2.2/tests/test_store.py +2410 -0
- hexproxy-0.2.2/tests/test_themes.py +116 -0
hexproxy-0.2.2/LICENSE
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
|
|
2
|
+
GNU GENERAL PUBLIC LICENSE
|
|
3
|
+
Version 3, April, 2026
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS
|
|
6
|
+
|
|
7
|
+
0. Definitions.
|
|
8
|
+
|
|
9
|
+
This License applies to any program or other work which contains a notice placed by the copyright holder stating it may be distributed under the terms of this General Public License.
|
|
10
|
+
|
|
11
|
+
1. Source Code.
|
|
12
|
+
|
|
13
|
+
The "source code" for a work means the preferred form of the work for making modifications to it.
|
|
14
|
+
|
|
15
|
+
2. Basic Permissions.
|
|
16
|
+
|
|
17
|
+
All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met.
|
|
18
|
+
|
|
19
|
+
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
20
|
+
|
|
21
|
+
No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty.
|
|
22
|
+
|
|
23
|
+
4. Conveying Verbatim Copies.
|
|
24
|
+
|
|
25
|
+
You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice.
|
|
26
|
+
|
|
27
|
+
5. Conveying Modified Source Versions.
|
|
28
|
+
|
|
29
|
+
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of Section 4.
|
|
30
|
+
|
|
31
|
+
6. Disclaimer of Warranty.
|
|
32
|
+
|
|
33
|
+
There is no warranty for the program, to the extent permitted by applicable law. Unless otherwise stated in writing, the copyright holders and/or other parties provide the program "AS IS" without warranty of any kind.
|
|
34
|
+
|
|
35
|
+
END OF TERMS AND CONDITIONS
|
|
36
|
+
|
|
37
|
+
|
hexproxy-0.2.2/PKG-INFO
ADDED
|
@@ -0,0 +1,556 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: hexproxy
|
|
3
|
+
Version: 0.2.2
|
|
4
|
+
Summary: HTTP interception proxy with a terminal-first TUI.
|
|
5
|
+
Author-email: SecureHex <contacto@securehex.cl>
|
|
6
|
+
Maintainer-email: Matías Tillerías <contacto@securehex.cl>
|
|
7
|
+
License: MIT
|
|
8
|
+
Project-URL: Homepage, https://securehex.cl
|
|
9
|
+
Project-URL: Repository, https://github.com/Secure-Hex/HexProxy
|
|
10
|
+
Project-URL: Documentation, https://hexproxy.securehex.cl
|
|
11
|
+
Keywords: proxy,http,tui,security,terminal,pentest
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Environment :: Console :: Curses
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
17
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
18
|
+
Classifier: Operating System :: MacOS
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Topic :: Internet :: Proxy Servers
|
|
22
|
+
Classifier: Topic :: Security
|
|
23
|
+
Requires-Python: >=3.12
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: windows-curses; platform_system == "Windows"
|
|
27
|
+
Provides-Extra: brotli
|
|
28
|
+
Requires-Dist: brotli; extra == "brotli"
|
|
29
|
+
Provides-Extra: full
|
|
30
|
+
Requires-Dist: brotli; extra == "full"
|
|
31
|
+
Dynamic: license-file
|
|
32
|
+
|
|
33
|
+
# HexProxy
|
|
34
|
+
|
|
35
|
+
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.
|
|
36
|
+
|
|
37
|
+
## Resumen
|
|
38
|
+
|
|
39
|
+
HexProxy ya cubre un flujo operativo real para análisis de tráfico:
|
|
40
|
+
|
|
41
|
+
- proxy HTTP funcional con captura de requests y responses
|
|
42
|
+
- interceptación de `request`, `response` o ambas fases
|
|
43
|
+
- inspección HTTPS mediante MITM local cuando el cliente confía la CA de HexProxy
|
|
44
|
+
- `Repeater`, `Sitemap`, `Match/Replace`, `Export`, `Scope`, `Filters`, `Settings` y `Keybindings`
|
|
45
|
+
- workspace HTTP unificado con `Request` y `Response` visibles en la misma pantalla
|
|
46
|
+
- proyectos persistentes con autosave
|
|
47
|
+
- exportación a snippets de desarrollo y transcript HTTP limpio para evidencia
|
|
48
|
+
- plugins Python cargables desde archivos locales
|
|
49
|
+
- themes globales, incluyendo colores nombrados y colores hex
|
|
50
|
+
|
|
51
|
+
## Características Principales
|
|
52
|
+
|
|
53
|
+
- `Flows` en tiempo real con navegación por teclado
|
|
54
|
+
- visualización simultánea de `Request` y `Response` para el flow seleccionado
|
|
55
|
+
- detección de tipo de contenido, `raw` / `pretty`, syntax highlighting básico, `word wrap` y scroll horizontal
|
|
56
|
+
- decodificación de `chunked`, `gzip`, `deflate` y `br` cuando es posible
|
|
57
|
+
- `Intercept` con historial persistente en la sesión y resolución fuera de orden
|
|
58
|
+
- `Repeater` con múltiples sesiones y múltiples envíos por sesión
|
|
59
|
+
- `Sitemap` por host y ruta
|
|
60
|
+
- `Match/Replace` persistente con builder guiado dentro de la TUI
|
|
61
|
+
- `Scope` con inclusiones y exclusiones explícitas
|
|
62
|
+
- filtros para limpiar `Flows` y `Sitemap`
|
|
63
|
+
- copia al clipboard desde `Export`
|
|
64
|
+
- documentación de plugins y themes dentro de `Settings`
|
|
65
|
+
|
|
66
|
+
## Instalación
|
|
67
|
+
|
|
68
|
+
### Requisitos
|
|
69
|
+
|
|
70
|
+
- Python `3.12+`
|
|
71
|
+
- `openssl` en `PATH` para generar la CA local y certificados por host
|
|
72
|
+
- terminal compatible con `curses`
|
|
73
|
+
|
|
74
|
+
### Linux / macOS
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
python3 -m venv .venv
|
|
78
|
+
source .venv/bin/activate
|
|
79
|
+
pip install -e .
|
|
80
|
+
hexproxy --listen-port 8080
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Windows
|
|
84
|
+
|
|
85
|
+
```powershell
|
|
86
|
+
py -m venv .venv
|
|
87
|
+
.venv\Scripts\Activate.ps1
|
|
88
|
+
pip install -e .
|
|
89
|
+
hexproxy --listen-port 8080
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Notas de instalación:
|
|
93
|
+
|
|
94
|
+
- En Windows, `windows-curses` se instala como dependencia del proyecto.
|
|
95
|
+
- Para MITM HTTPS en Windows también necesitas `openssl.exe` accesible desde `PATH`.
|
|
96
|
+
- Para decodificar `brotli`, instala opcionalmente `brotli`.
|
|
97
|
+
|
|
98
|
+
También puedes ejecutar el módulo directamente:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
PYTHONPATH=src python3 -m hexproxy --listen-port 8080
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Inicio Rápido
|
|
105
|
+
|
|
106
|
+
Levantar el proxy:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
hexproxy --listen-port 8080
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Levantar el proxy con proyecto persistente:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
hexproxy --listen-port 8080 --project projects/demo.hexproxy.json
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Cargar plugins adicionales:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
hexproxy --plugin-dir plugins --plugin-dir /ruta/a/plugins-extra
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Si el puerto solicitado está ocupado, HexProxy intenta puertos cercanos y muestra el puerto final dentro de la TUI.
|
|
125
|
+
|
|
126
|
+
## Opciones CLI
|
|
127
|
+
|
|
128
|
+
- `--listen-host`: interfaz de escucha
|
|
129
|
+
- `--listen-port`: puerto del proxy
|
|
130
|
+
- `--project`: archivo de proyecto para cargar y autosalvar sesiones
|
|
131
|
+
- `--plugin-dir`: directorio adicional de plugins; se puede repetir
|
|
132
|
+
- `--cert-dir`: directorio de certificados; por defecto usa una ruta global estable
|
|
133
|
+
- `--config-file`: archivo de configuración global
|
|
134
|
+
|
|
135
|
+
## Workspaces
|
|
136
|
+
|
|
137
|
+
### 1. Overview
|
|
138
|
+
|
|
139
|
+
Vista principal con la lista de `Flows` capturados y detalles generales del item seleccionado.
|
|
140
|
+
|
|
141
|
+
### 2. Intercept
|
|
142
|
+
|
|
143
|
+
Permite interceptar:
|
|
144
|
+
|
|
145
|
+
- `off`
|
|
146
|
+
- `request`
|
|
147
|
+
- `response`
|
|
148
|
+
- `both`
|
|
149
|
+
|
|
150
|
+
Características:
|
|
151
|
+
|
|
152
|
+
- cola de interceptación resoluble fuera de orden
|
|
153
|
+
- historial retenido después de reenviar o descartar
|
|
154
|
+
- edición validada de request y response
|
|
155
|
+
|
|
156
|
+
### 3. Repeater
|
|
157
|
+
|
|
158
|
+
Permite cargar un flow, editar el request y reenviarlo manualmente.
|
|
159
|
+
|
|
160
|
+
Incluye:
|
|
161
|
+
|
|
162
|
+
- múltiples sesiones
|
|
163
|
+
- múltiples envíos por sesión
|
|
164
|
+
- historial por sesión
|
|
165
|
+
- request editable
|
|
166
|
+
- response visible y reutilizable para export
|
|
167
|
+
|
|
168
|
+
Limitaciones actuales:
|
|
169
|
+
|
|
170
|
+
- no soporta `CONNECT`
|
|
171
|
+
- no soporta upgrades `WebSocket`
|
|
172
|
+
|
|
173
|
+
### 4. Sitemap
|
|
174
|
+
|
|
175
|
+
Construye un árbol por host y ruta usando el tráfico visible actualmente.
|
|
176
|
+
|
|
177
|
+
Incluye:
|
|
178
|
+
|
|
179
|
+
- árbol por host
|
|
180
|
+
- request y response del item seleccionado
|
|
181
|
+
- integración con `Repeater`
|
|
182
|
+
- integración con `Scope` y `Filters`
|
|
183
|
+
|
|
184
|
+
### 5. Match/Replace
|
|
185
|
+
|
|
186
|
+
Gestiona reglas persistentes para modificar requests y responses.
|
|
187
|
+
|
|
188
|
+
Incluye:
|
|
189
|
+
|
|
190
|
+
- builder guiado dentro de la TUI
|
|
191
|
+
- edición de reglas existentes
|
|
192
|
+
- eliminación de reglas
|
|
193
|
+
- soporte `literal` y `regex`
|
|
194
|
+
- scope de regla `request`, `response` o `both`
|
|
195
|
+
|
|
196
|
+
### 6 y 7. HTTP Workspace
|
|
197
|
+
|
|
198
|
+
Los atajos `6` y `7` abren el mismo workspace HTTP:
|
|
199
|
+
|
|
200
|
+
- `6`: abre el workspace con foco en `Request`
|
|
201
|
+
- `7`: abre el mismo workspace con foco en `Response`
|
|
202
|
+
|
|
203
|
+
La pantalla muestra al mismo tiempo:
|
|
204
|
+
|
|
205
|
+
- `Flows` a la izquierda
|
|
206
|
+
- `Request` arriba a la derecha
|
|
207
|
+
- `Response` abajo a la derecha
|
|
208
|
+
|
|
209
|
+
Cada panel soporta:
|
|
210
|
+
|
|
211
|
+
- scroll vertical
|
|
212
|
+
- scroll horizontal cuando `word wrap` está apagado
|
|
213
|
+
- `raw` / `pretty`
|
|
214
|
+
- syntax highlighting básico
|
|
215
|
+
|
|
216
|
+
Tipos soportados por el viewer:
|
|
217
|
+
|
|
218
|
+
- `JSON`
|
|
219
|
+
- `XML`
|
|
220
|
+
- `HTML`
|
|
221
|
+
- `application/x-www-form-urlencoded`
|
|
222
|
+
- `JavaScript`
|
|
223
|
+
- `CSS`
|
|
224
|
+
- texto plano
|
|
225
|
+
- binarios en `hexdump`
|
|
226
|
+
|
|
227
|
+
### 8. Export
|
|
228
|
+
|
|
229
|
+
Genera snippets y transcripts desde el flow, item interceptado o sesión de repeater actual.
|
|
230
|
+
|
|
231
|
+
Formatos disponibles:
|
|
232
|
+
|
|
233
|
+
- `HTTP request + response`
|
|
234
|
+
- `Python requests`
|
|
235
|
+
- `curl (bash)`
|
|
236
|
+
- `curl (windows)`
|
|
237
|
+
- `Node.js fetch`
|
|
238
|
+
- `Go net/http`
|
|
239
|
+
- `PHP cURL`
|
|
240
|
+
- `Rust reqwest`
|
|
241
|
+
|
|
242
|
+
También soporta:
|
|
243
|
+
|
|
244
|
+
- copia directa al clipboard
|
|
245
|
+
- `word wrap`
|
|
246
|
+
- scroll horizontal
|
|
247
|
+
- syntax highlighting básico
|
|
248
|
+
|
|
249
|
+
### Settings
|
|
250
|
+
|
|
251
|
+
`Settings` está organizado por secciones:
|
|
252
|
+
|
|
253
|
+
- `Appearance`
|
|
254
|
+
- `Extensions`
|
|
255
|
+
- `TLS`
|
|
256
|
+
- `Traffic`
|
|
257
|
+
- `Controls`
|
|
258
|
+
|
|
259
|
+
Desde ahí puedes abrir o ejecutar:
|
|
260
|
+
|
|
261
|
+
- `Themes`
|
|
262
|
+
- `Plugins`
|
|
263
|
+
- `Plugin Developer Docs`
|
|
264
|
+
- generar o regenerar certificados
|
|
265
|
+
- `Scope`
|
|
266
|
+
- `Filters`
|
|
267
|
+
- `Keybindings`
|
|
268
|
+
|
|
269
|
+
### Scope
|
|
270
|
+
|
|
271
|
+
Workspace interactivo para gestionar:
|
|
272
|
+
|
|
273
|
+
- patrones in-scope
|
|
274
|
+
- patrones out-of-scope
|
|
275
|
+
- altas, edición y borrado sin salir de la TUI
|
|
276
|
+
|
|
277
|
+
### Filters
|
|
278
|
+
|
|
279
|
+
Workspace interactivo para controlar qué aparece en `Flows` y `Sitemap`.
|
|
280
|
+
|
|
281
|
+
Filtros actuales:
|
|
282
|
+
|
|
283
|
+
- mostrar u ocultar tráfico fuera de scope
|
|
284
|
+
- requests con query, sin query o ambos
|
|
285
|
+
- tráfico con body, sin body o ambos
|
|
286
|
+
- fallos: todos, solo fallos, ocultar fallos, `4xx`, `5xx`, errores de conexión
|
|
287
|
+
- allowlist de métodos HTTP
|
|
288
|
+
- denylist de métodos HTTP
|
|
289
|
+
- extensiones ocultas como `jpg`, `png`, `js`, `css`, `woff`, etc.
|
|
290
|
+
|
|
291
|
+
### Keybindings
|
|
292
|
+
|
|
293
|
+
Workspace interactivo para editar atajos globales.
|
|
294
|
+
|
|
295
|
+
Características:
|
|
296
|
+
|
|
297
|
+
- bindings persistentes para toda la aplicación
|
|
298
|
+
- secuencias de uno o dos caracteres
|
|
299
|
+
- validación contra duplicados
|
|
300
|
+
- validación contra combinaciones ambiguas
|
|
301
|
+
|
|
302
|
+
## HTTPS, Certificados Y Navegadores
|
|
303
|
+
|
|
304
|
+
HexProxy puede inspeccionar HTTPS mediante MITM local.
|
|
305
|
+
|
|
306
|
+
Flujo:
|
|
307
|
+
|
|
308
|
+
1. HexProxy genera una CA local
|
|
309
|
+
2. el cliente debe confiar esa CA
|
|
310
|
+
3. el navegador o cliente debe usar HexProxy como proxy HTTP explícito
|
|
311
|
+
|
|
312
|
+
La CA puede:
|
|
313
|
+
|
|
314
|
+
- generarse o regenerarse desde `Settings`
|
|
315
|
+
- descargarse desde la página local servida por HexProxy
|
|
316
|
+
|
|
317
|
+
Rutas útiles:
|
|
318
|
+
|
|
319
|
+
- `http://127.0.0.1:PUERTO/`
|
|
320
|
+
- `http://localhost:PUERTO/`
|
|
321
|
+
- `http://hexproxy/` cuando el navegador ya usa HexProxy como proxy
|
|
322
|
+
- `http://127.0.0.1:PUERTO/cert`
|
|
323
|
+
|
|
324
|
+
Ubicación por defecto de certificados:
|
|
325
|
+
|
|
326
|
+
- Linux/macOS: `~/.config/hexproxy/certs/`
|
|
327
|
+
- Windows: `%APPDATA%\hexproxy\certs\`
|
|
328
|
+
|
|
329
|
+
Notas importantes:
|
|
330
|
+
|
|
331
|
+
- si regeneras la CA, debes volver a importarla en el cliente
|
|
332
|
+
- Firefox debe configurarse como `HTTP Proxy`, no `HTTPS Proxy`
|
|
333
|
+
- si el cliente no confía la CA, el MITM HTTPS fallará
|
|
334
|
+
|
|
335
|
+
## Scope
|
|
336
|
+
|
|
337
|
+
El `scope` controla qué hosts quedan permitidos para interceptación.
|
|
338
|
+
|
|
339
|
+
Comportamiento:
|
|
340
|
+
|
|
341
|
+
- si el scope está vacío, toda la captura puede entrar al interceptor
|
|
342
|
+
- si el scope tiene entradas, solo los hosts permitidos se interceptan
|
|
343
|
+
- el tráfico fuera de scope puede seguir mostrándose o ocultarse desde `Filters`
|
|
344
|
+
|
|
345
|
+
Patrones soportados:
|
|
346
|
+
|
|
347
|
+
- `example.com`: coincide con `example.com` y subdominios
|
|
348
|
+
- `*.example.com`: coincide solo con subdominios
|
|
349
|
+
- `!test.example.com`: excluye un host concreto
|
|
350
|
+
- `!*.internal.example.com`: excluye subdominios concretos
|
|
351
|
+
- `*`: coincide con todo
|
|
352
|
+
|
|
353
|
+
También puedes añadir el host actual al scope desde:
|
|
354
|
+
|
|
355
|
+
- `Flows`
|
|
356
|
+
- `Sitemap`
|
|
357
|
+
- el workspace HTTP
|
|
358
|
+
|
|
359
|
+
## Proyectos Y Persistencia
|
|
360
|
+
|
|
361
|
+
Si usas `--project`, HexProxy persiste:
|
|
362
|
+
|
|
363
|
+
- flows capturados
|
|
364
|
+
- requests y responses
|
|
365
|
+
- reglas de `Match/Replace`
|
|
366
|
+
- scope
|
|
367
|
+
- filtros de vista
|
|
368
|
+
|
|
369
|
+
Comportamiento:
|
|
370
|
+
|
|
371
|
+
- si el archivo existe, se carga
|
|
372
|
+
- si no existe, se crea uno nuevo
|
|
373
|
+
- cada cambio importante se autosalva
|
|
374
|
+
- puedes forzar guardado manual
|
|
375
|
+
- si no iniciaste con `--project`, HexProxy puede pedir nombre o ruta al guardar
|
|
376
|
+
|
|
377
|
+
## Keybindings Por Defecto
|
|
378
|
+
|
|
379
|
+
Workspaces:
|
|
380
|
+
|
|
381
|
+
- `1`: `Overview`
|
|
382
|
+
- `2`: `Intercept`
|
|
383
|
+
- `3`: `Repeater`
|
|
384
|
+
- `4`: `Sitemap`
|
|
385
|
+
- `5`: `Match/Replace`
|
|
386
|
+
- `6`: `HTTP` con foco en request
|
|
387
|
+
- `7`: `HTTP` con foco en response
|
|
388
|
+
- `8`: `Export`
|
|
389
|
+
- `w`: `Settings`
|
|
390
|
+
- `0`: `Keybindings`
|
|
391
|
+
|
|
392
|
+
Acciones principales:
|
|
393
|
+
|
|
394
|
+
- `a`: enviar en `Intercept` y `Repeater`, o copiar en `Export`
|
|
395
|
+
- `e`: editar item actual
|
|
396
|
+
- `x`: descartar, borrar o cancelar según el workspace
|
|
397
|
+
- `y`: mandar el flow actual a `Repeater`
|
|
398
|
+
- `A`: agregar host actual al scope
|
|
399
|
+
- `p`: alternar `raw` / `pretty`
|
|
400
|
+
- `z`: alternar `word wrap`
|
|
401
|
+
- `o`: alternar visibilidad fuera de scope
|
|
402
|
+
|
|
403
|
+
Archivo global de configuración:
|
|
404
|
+
|
|
405
|
+
- Linux/macOS: `~/.config/hexproxy/config.json`
|
|
406
|
+
- Windows: `%APPDATA%\hexproxy\config.json`
|
|
407
|
+
|
|
408
|
+
## Themes
|
|
409
|
+
|
|
410
|
+
HexProxy incluye themes built-in y soporta themes personalizados.
|
|
411
|
+
|
|
412
|
+
Themes incorporados:
|
|
413
|
+
|
|
414
|
+
- `default`
|
|
415
|
+
- `amber`
|
|
416
|
+
- `ocean`
|
|
417
|
+
- `forest`
|
|
418
|
+
- `mono`
|
|
419
|
+
|
|
420
|
+
Ubicación de themes custom:
|
|
421
|
+
|
|
422
|
+
- Linux/macOS: `~/.config/hexproxy/themes/`
|
|
423
|
+
- Windows: `%APPDATA%\hexproxy\themes\`
|
|
424
|
+
|
|
425
|
+
Formato JSON:
|
|
426
|
+
|
|
427
|
+
```json
|
|
428
|
+
{
|
|
429
|
+
"name": "sunset",
|
|
430
|
+
"description": "Warm custom palette",
|
|
431
|
+
"extends": "default",
|
|
432
|
+
"colors": {
|
|
433
|
+
"chrome": { "fg": "#1d3557", "bg": "#f1c40f" },
|
|
434
|
+
"accent": { "fg": "red", "bg": "default" },
|
|
435
|
+
"keyword": { "fg": "#ff8800", "bg": "default" }
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
Claves soportadas:
|
|
441
|
+
|
|
442
|
+
- `name`: nombre único del theme
|
|
443
|
+
- `description`: descripción opcional
|
|
444
|
+
- `extends`: theme base, por defecto `default`
|
|
445
|
+
- `colors`: overrides por rol
|
|
446
|
+
|
|
447
|
+
Roles soportados:
|
|
448
|
+
|
|
449
|
+
- `chrome`
|
|
450
|
+
- `selection`
|
|
451
|
+
- `success`
|
|
452
|
+
- `error`
|
|
453
|
+
- `warning`
|
|
454
|
+
- `accent`
|
|
455
|
+
- `keyword`
|
|
456
|
+
- `info`
|
|
457
|
+
|
|
458
|
+
Valores de color soportados:
|
|
459
|
+
|
|
460
|
+
- `default`
|
|
461
|
+
- `black`
|
|
462
|
+
- `red`
|
|
463
|
+
- `green`
|
|
464
|
+
- `yellow`
|
|
465
|
+
- `blue`
|
|
466
|
+
- `magenta`
|
|
467
|
+
- `cyan`
|
|
468
|
+
- `white`
|
|
469
|
+
- `#RGB`
|
|
470
|
+
- `#RRGGBB`
|
|
471
|
+
|
|
472
|
+
Notas sobre hex:
|
|
473
|
+
|
|
474
|
+
- HexProxy acepta hex colors en el JSON.
|
|
475
|
+
- En runtime, la TUI los aproxima al color de terminal más cercano soportado por `curses`.
|
|
476
|
+
- Esto mantiene compatibilidad con terminales básicas sin perder expresividad en la definición del theme.
|
|
477
|
+
|
|
478
|
+
## Plugins
|
|
479
|
+
|
|
480
|
+
HexProxy carga plugins Python desde:
|
|
481
|
+
|
|
482
|
+
- `plugins/` si existe
|
|
483
|
+
- cualquier directorio indicado con `--plugin-dir`
|
|
484
|
+
|
|
485
|
+
Reglas del loader:
|
|
486
|
+
|
|
487
|
+
- se cargan archivos `*.py`
|
|
488
|
+
- archivos que comienzan con `_` se ignoran
|
|
489
|
+
- el módulo puede exportar `register(api)`, `register()`, `PLUGIN` o `contribute(api)`
|
|
490
|
+
|
|
491
|
+
Capacidades de la API v2:
|
|
492
|
+
|
|
493
|
+
- hooks de tráfico para request/response/error
|
|
494
|
+
- workspaces propios
|
|
495
|
+
- paneles dentro de workspaces propios y paneles en workspaces integrados
|
|
496
|
+
- exporters adicionales
|
|
497
|
+
- keybindings configurables
|
|
498
|
+
- analyzers
|
|
499
|
+
- metadata visible en la TUI
|
|
500
|
+
- campos en `Settings`
|
|
501
|
+
- estado global y por proyecto para plugins
|
|
502
|
+
|
|
503
|
+
Ejemplo:
|
|
504
|
+
|
|
505
|
+
```python
|
|
506
|
+
def register(api):
|
|
507
|
+
api.add_workspace("demo_workspace", "Demo", "Workspace de plugin", shortcut="dw")
|
|
508
|
+
api.add_panel(
|
|
509
|
+
"demo_workspace",
|
|
510
|
+
"summary",
|
|
511
|
+
"Summary",
|
|
512
|
+
render_lines=lambda context: ["Plugin workspace activo"],
|
|
513
|
+
)
|
|
514
|
+
return DemoPlugin()
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
Referencias:
|
|
518
|
+
|
|
519
|
+
- [Ejemplo de plugin](examples/add_header_plugin.py)
|
|
520
|
+
- [README de plugins](plugins/README.md)
|
|
521
|
+
- [Guía de desarrollo de plugins](docs/plugin-development.md)
|
|
522
|
+
|
|
523
|
+
Nota de runtime:
|
|
524
|
+
|
|
525
|
+
- la metadata de plugins persistida por flow se almacena como strings
|
|
526
|
+
- para guardar estructuras debes usar `json.dumps(...)` al escribir y `json.loads(...)` al leer
|
|
527
|
+
|
|
528
|
+
## Compatibilidad De Plataforma
|
|
529
|
+
|
|
530
|
+
HexProxy ya contempla:
|
|
531
|
+
|
|
532
|
+
- rutas globales por plataforma para config, themes y certificados
|
|
533
|
+
- instalación de `windows-curses` en Windows
|
|
534
|
+
- integración de clipboard para Linux, macOS y Windows
|
|
535
|
+
|
|
536
|
+
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.
|
|
537
|
+
|
|
538
|
+
## Limitaciones Actuales
|
|
539
|
+
|
|
540
|
+
- soporte `WebSocket` limitado al túnel tras `101 Switching Protocols`
|
|
541
|
+
- `Repeater` no soporta `CONNECT`
|
|
542
|
+
- el rendering y clipboard dependen de lo que soporte tu terminal
|
|
543
|
+
|
|
544
|
+
## Desarrollo
|
|
545
|
+
|
|
546
|
+
Ejecutar tests:
|
|
547
|
+
|
|
548
|
+
```bash
|
|
549
|
+
PYTHONPATH=src .venv/bin/python -m unittest discover -s tests -v
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
Verificación rápida de sintaxis:
|
|
553
|
+
|
|
554
|
+
```bash
|
|
555
|
+
python3 -m compileall src tests
|
|
556
|
+
```
|