
Proxy HTTP di intercettazione basato su terminale con TUI per catturare, ispezionare e modificare le richieste in tempo reale, oltre a un Repeater per rinviare e ritoccare le richieste.
Proxy di intercettazione HTTP/HTTPS minimale basato su terminale.
https://github.com/user-attachments/assets/94f9c9ae-5842-4b19-9f5b-84dedb9430e6
Funzionalità · Installazione · Supporto HTTPS · Utilizzo · Come funziona
Roxy è un proxy di intercettazione leggero per HTTP e HTTPS con un'interfaccia utente per terminale (TUI) scritta in Rust. Cattura, ispeziona e modifica le richieste in tempo reale, prima che raggiungano il server, direttamente dal tuo terminale. Pensalo come un'alternativa minimale e nativa per terminale a Burp Suite per l'analisi quotidiana del traffico.
CONNECT, con certificati generati automaticamente.$EDITOR.--host e --port, e decidi quali host vengono intercettati o passati attraverso.Per compilarlo dai sorgenti ti serve:
| Requisito | Note |
|---|---|
| Rust 1.85 o superiore | Verifica con rustc --version. |
| Un compilatore C | gcc o clang. |
$EDITOR | Necessario solo per la funzionalità di modifica delle richieste. |
git clone https://github.com/vid4l-07/Roxy.git
cd Roxy
cargo build --release
Il binario sarà disponibile in target/release/roxy.
cargo install --git https://github.com/vid4l-07/Roxy.git
Il binario sarà disponibile in ~/.cargo/bin/roxy.
[!note] Se il passthrough HTTPS è abilitato, il supporto HTTPS non è necessario.
| Cosa | Posizione | Note |
|---|---|---|
| Certificato e chiave della CA | ~/.config/roxy/ca.crt, ~/.config/roxy/ca.key | Creati in modo lazy, la prima volta che una richiesta HTTPS viene intercettata. |
| Certificato foglia per host | /tmp/roxy_certs/<host>.crt, /tmp/roxy_certs/<host>.key | Emessi su richiesta e memorizzati nella cache. La cache viene svuotata ogni volta che viene generata una nuova CA. |
Roxy genera una CA auto-firmata chiamata Roxy CA.
[!Warning] Ogni richiesta HTTPS fallirà la validazione finché la CA non sarà considerata attendibile dal client.
Installa ~/.config/roxyca.crt nel tuo browser o sistema.
Puoi anche scaricarlo dalla pagina web integrata all'indirizzo http://roxy (o http://<host>:<port>).
Firefox / Chrome:
Settings → Privacy & Security → Certificates → View Certificates.~/.config/roxy/ca.crt.Archivio CA di sistema Per strumenti come 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
Per rimuoverlo di nuovo, elimina il file e riesegui il comando corrispondente.
rm -rf ~/.config/roxy
Roxy genera una nuova CA alla successiva richiesta HTTPS e rimuove ogni certificato foglia che aveva memorizzato nella cache. Dovrai considerare attendibile la nuova CA di nuovo. Ricorda di rimuovere quella vecchia dal browser e dall'archivio di sistema.
| Opzione | Descrizione |
|---|---|
-h, --host <HOST> | Host di ascolto. Predefinito 127.0.0.1. |
-p, --port <PORT> | Porta di ascolto. Predefinita 8080. |
--passthrough | Tunneling HTTPS senza decifrarlo, per ogni host. |
--passthrough-host <HOSTS> | Come --passthrough, ma solo per gli host elencati. |
--intercept-https <HOSTS> | Intercetta questi host anche in modalità passthrough. |
--help | Stampa il messaggio di aiuto. |
# Pass every host through untouched except the one you want to inspect
roxy --passthrough --intercept-https <HOSTS>
| Tasto | Azione |
|---|---|
q | Esci |
Tab | Passa tra le schermate Proxy e Repeater |
? | Apri il popup di aiuto per la schermata corrente |
| Tasto | Azione |
|---|---|
i | Attiva/disattiva l'intercettazione ON/OFF |
Enter | Inoltra la richiesta intercettata |
e | Modifica la richiesta nell'editor esterno |
u | Annulla la modifica |
U | Ripeti la modifica |
r | Invia la richiesta al Repeater |
↑/k | Scorri verso l'alto |
↓/j | Scorri verso il basso |
| Tasto | Azione |
|---|---|
Enter | Invia la richiesta corrente |
e | Modifica la richiesta nell'editor esterno |
u | Annulla la modifica |
U | Ripeti la modifica |
r | Rinomina la scheda corrente |
n | Scheda repeater successiva |
p | Scheda repeater precedente |
x | Chiudi la scheda corrente |
z | Attiva/disattiva lo zoom sul pannello in focus |
↑/k | Scorri verso l'alto |
↓/j | Scorri verso il basso |
←/h / →/l | Passa il focus tra i pannelli Request e Response |
H | Riduci la larghezza del pannello Request |
L | Aumenta la larghezza del pannello Request |
Quando premi e, la richiesta grezza viene scritta in un file temporaneo e aperta con il binario definito da $EDITOR. Modificala, salva ed esci.
La richiesta modificata sostituisce l'originale e Content-Length viene ricalcolato automaticamente.
127.0.0.1:8080 per impostazione predefinita, configurabile con --host e --port, e gestisce ciascuna nel proprio task asincrono.CONNECT semplice riceve come risposta 200 Connection Established, il TLS viene terminato localmente con un certificato emesso per l'host richiesto, e la richiesta decifrata viene letta come una normale richiesta HTTP. Gli host corrispondenti alle opzioni di passthrough vengono invece inoltrati al server reale, senza terminare il TLS.Host.tokio::mpsc e la connessione attende su un canale oneshot finché l'utente non la inoltra. La richiesta può essere inoltrata così com'è, modificata prima, o inviata al Repeater.webpki-roots per HTTPS), scrive la richiesta e trasmette in streaming la risposta grezza al client.Enter, scegliendo il trasporto in base al protocollo con cui la richiesta è stata catturata, e mostra la risposta affiancata alla richiesta.