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 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
+
@@ -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
+ ```