
Proxy de interceptación HTTP basado en terminal con TUI para capturar, inspeccionar y modificar solicitudes en tiempo real, además de un Repeater para reenviar y ajustar solicitudes.
Proxy de interceptación HTTP/HTTPS minimalista basado en terminal.
https://github.com/user-attachments/assets/94f9c9ae-5842-4b19-9f5b-84dedb9430e6
Características · Instalación · Soporte HTTPS · Uso · Cómo funciona
Roxy es un proxy de interceptación ligero para HTTP y HTTPS con una interfaz de usuario de terminal (TUI) escrita en Rust. Captura, inspecciona y modifica solicitudes en tiempo real, antes de que lleguen al servidor, desde dentro de tu terminal. Piénsalo como una alternativa minimalista y nativa de terminal a Burp Suite para el análisis de tráfico diario.
CONNECT, con certificados generados automáticamente.$EDITOR.--host y --port, y decide qué hosts se interceptan o se dejan pasar.Para compilarlo desde el código fuente necesitas:
| Requisito | Notas |
|---|---|
| Rust 1.85 o superior | Comprueba con rustc --version. |
| Un compilador de C | gcc o clang. |
$EDITOR | Solo es necesario para la función de edición de solicitudes. |
git clone https://github.com/vid4l-07/Roxy.git
cd Roxy
cargo build --release
El binario estará disponible en target/release/roxy.
cargo install --git https://github.com/vid4l-07/Roxy.git
El binario estará disponible en ~/.cargo/bin/roxy.
[!note] Si el passthrough HTTPS está habilitado, no se requiere soporte HTTPS.
| Qué | Ubicación | Notas |
|---|---|---|
| Certificado y clave de la CA | ~/.config/roxy/ca.crt, ~/.config/roxy/ca.key | Se crean de forma diferida, la primera vez que se intercepta una solicitud HTTPS. |
| Certificado hoja por host | /tmp/roxy_certs/<host>.crt, /tmp/roxy_certs/<host>.key | Se emiten bajo demanda y se almacenan en caché. La caché se borra cada vez que se genera una nueva CA. |
Roxy genera una CA autofirmada llamada Roxy CA.
[!Warning] Toda solicitud HTTPS fallará la validación hasta que el cliente confíe en la CA.
Instala ~/.config/roxyca.crt en tu navegador o sistema.
También puedes descargarlo desde la página web integrada en http://roxy (o http://<host>:<port>).
Firefox / Chrome:
Settings → Privacy & Security → Certificates → View Certificates.~/.config/roxy/ca.crt.Almacén de CA del sistema Para herramientas como curl.
# Debian / Ubuntu
sudo cp ~/.config/roxy/ca.crt /usr/local/share/ca-certificates/roxy.crt
sudo update-ca-certificates
# Fedora / RHEL / Arch
sudo cp ~/.config/roxy/ca.crt /etc/pki/ca-trust/source/anchors/roxy.crt
sudo update-ca-trust extract
Para eliminarlo de nuevo, borra el archivo y vuelve a ejecutar el comando correspondiente.
rm -rf ~/.config/roxy
Roxy genera una nueva CA en la siguiente solicitud HTTPS y elimina todos los certificados hoja que tenía en caché. Tendrás que confiar en la nueva CA de nuevo. Recuerda eliminar la antigua de tu navegador y del almacén del sistema.
| Opción | Descripción |
|---|---|
-h, --host <HOST> | Host de escucha. Por defecto 127.0.0.1. |
-p, --port <PORT> | Puerto de escucha. Por defecto 8080. |
--passthrough | Tuneliza HTTPS sin descifrarlo, para todos los hosts. |
--passthrough-host <HOSTS> | Igual que --passthrough, pero solo para los hosts indicados. |
--intercept-https <HOSTS> | Intercepta estos hosts incluso en modo passthrough. |
--help | Muestra el mensaje de ayuda. |
# Pass every host through untouched except the one you want to inspect
roxy --passthrough --intercept-https <HOSTS>
| Tecla | Acción |
|---|---|
q | Salir |
Tab | Cambiar entre las pantallas Proxy y Repeater |
? | Abrir la ventana emergente de ayuda de la pantalla actual |
| Tecla | Acción |
|---|---|
i | Activar/desactivar la interceptación |
Enter | Reenviar la solicitud interceptada |
e | Editar la solicitud en un editor externo |
u | Deshacer edición |
U | Rehacer edición |
r | Enviar la solicitud al Repeater |
↑/k | Desplazar hacia arriba |
↓/j | Desplazar hacia abajo |
| Tecla | Acción |
|---|---|
Enter | Enviar la solicitud actual |
e | Editar la solicitud en un editor externo |
u | Deshacer edición |
U | Rehacer edición |
r | Renombrar la pestaña actual |
n | Siguiente pestaña del repeater |
p | Pestaña anterior del repeater |
x | Cerrar la pestaña actual |
z | Alternar el zoom en el panel enfocado |
↑/k | Desplazar hacia arriba |
↓/j | Desplazar hacia abajo |
←/h / →/l | Alternar el foco entre los paneles Request y Response |
H | Reducir el ancho del panel Request |
L | Aumentar el ancho del panel Request |
Cuando pulsas e, la solicitud sin procesar se escribe en un archivo temporal y se abre con el binario definido por $EDITOR. Edítala, guarda y sal.
La solicitud modificada reemplaza a la original y Content-Length se recalcula automáticamente.
127.0.0.1:8080 por defecto, configurable con --host y --port, y gestiona cada una en su propia tarea asíncrona.CONNECT simple se responde con 200 Connection Established, TLS se termina localmente con un certificado emitido para el host solicitado, y la solicitud descifrada se lee como una solicitud HTTP normal. Los hosts que coinciden con las opciones de passthrough se retransmiten al servidor real en su lugar, sin terminar TLS.Host.tokio::mpsc y la conexión espera en un canal oneshot hasta que el usuario la reenvía. La solicitud puede reenviarse tal cual, editarse primero o enviarse al Repeater.webpki-roots para HTTPS), escribe la solicitud y transmite la respuesta sin procesar de vuelta al cliente.Enter, eligiendo el transporte según el protocolo con el que se capturó la solicitud, y muestra la respuesta junto a la solicitud.