
Proxy de interceptação HTTP baseado em terminal com TUI para capturar, inspecionar e modificar requisições em tempo real, além de um Repeater para reenviar e ajustar requisições.
Proxy de interceptação HTTP/HTTPS minimalista baseado em terminal.
https://github.com/user-attachments/assets/94f9c9ae-5842-4b19-9f5b-84dedb9430e6
Funcionalidades · Instalação · Suporte a HTTPS · Uso · Como funciona
Roxy é um proxy de interceptação leve para HTTP e HTTPS com uma interface de usuário de terminal (TUI) escrita em Rust. Ele captura, inspeciona e modifica requisições em tempo real, antes que elas cheguem ao servidor, de dentro do seu terminal. Pense nele como uma alternativa minimalista e nativa de terminal ao Burp Suite para análise de tráfego do dia a dia.
CONNECT, com certificados gerados automaticamente.$EDITOR.--host e --port, e decida quais hosts são interceptados ou passam direto.Para compilar a partir do código-fonte você precisa de:
| Requisito | Observações |
|---|---|
| Rust 1.85 ou mais recente | Verifique com rustc --version. |
| Um compilador C | gcc ou clang. |
$EDITOR | Necessário apenas para o recurso de edição de requisições. |
git clone https://github.com/vid4l-07/Roxy.git
cd Roxy
cargo build --release
O binário estará disponível em target/release/roxy.
cargo install --git https://github.com/vid4l-07/Roxy.git
O binário estará disponível em ~/.cargo/bin/roxy.
[!note] Se o passthrough HTTPS estiver habilitado, o suporte a HTTPS não é necessário.
| O quê | Localização | Observações |
|---|---|---|
| Certificado e chave da CA | ~/.config/roxy/ca.crt, ~/.config/roxy/ca.key | Criados de forma preguiçosa, na primeira vez que uma requisição HTTPS é interceptada. |
| Certificado folha por host | /tmp/roxy_certs/<host>.crt, /tmp/roxy_certs/<host>.key | Emitidos sob demanda e armazenados em cache. O cache é apagado sempre que uma nova CA é gerada. |
Roxy gera uma CA autoassinada chamada Roxy CA.
[!Warning] Toda requisição HTTPS falhará na validação até que a CA seja confiada pelo cliente.
Instale ~/.config/roxyca.crt no seu navegador ou sistema.
Você também pode baixá-lo na página web integrada em http://roxy (ou http://<host>:<port>).
Firefox / Chrome:
Settings → Privacy & Security → Certificates → View Certificates.~/.config/roxy/ca.crt.Armazenamento de CA do sistema Para ferramentas 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 removê-lo novamente, exclua o arquivo e execute o comando correspondente novamente.
rm -rf ~/.config/roxy
Roxy gera uma nova CA na próxima requisição HTTPS e remove todos os certificados folha que havia armazenado em cache. Você terá que confiar na nova CA novamente. Lembre-se de remover a antiga do seu navegador e do armazenamento do sistema.
| Opção | Descrição |
|---|---|
-h, --host <HOST> | Host de escuta. Padrão: 127.0.0.1. |
-p, --port <PORT> | Porta de escuta. Padrão: 8080. |
--passthrough | Tunelar HTTPS sem descriptografá-lo, para todos os hosts. |
--passthrough-host <HOSTS> | O mesmo que --passthrough, mas apenas para os hosts listados. |
--intercept-https <HOSTS> | Interceptar esses hosts mesmo em modo passthrough. |
--help | Exibir a mensagem de ajuda. |
# Pass every host through untouched except the one you want to inspect
roxy --passthrough --intercept-https <HOSTS>
| Tecla | Ação |
|---|---|
q | Sair |
Tab | Alternar entre as telas Proxy e Repeater |
? | Abrir o popup de ajuda para a tela atual |
| Tecla | Ação |
|---|---|
i | Alternar interceptação ON/OFF |
Enter | Encaminhar a requisição interceptada |
e | Editar requisição no editor externo |
u | Desfazer edição |
U | Refazer edição |
r | Enviar requisição para o Repeater |
↑/k | Rolar para cima |
↓/j | Rolar para baixo |
| Tecla | Ação |
|---|---|
Enter | Enviar a requisição atual |
e | Editar requisição no editor externo |
u | Desfazer edição |
U | Refazer edição |
r | Renomear aba atual |
n | Próxima aba do repeater |
p | Aba anterior do repeater |
x | Fechar aba atual |
z | Alternar zoom no painel em foco |
↑/k | Rolar para cima |
↓/j | Rolar para baixo |
←/h / →/l | Alternar foco entre os painéis Request e Response |
H | Diminuir largura do painel Request |
L | Aumentar largura do painel Request |
Quando você pressiona e, a requisição bruta é escrita em um arquivo temporário e aberta com o binário definido por $EDITOR. Edite, salve e saia.
A requisição modificada substitui a original e o Content-Length é recalculado automaticamente.
127.0.0.1:8080 por padrão, configurável com --host e --port, e trata cada uma em sua própria tarefa assíncrona.CONNECT simples é respondida com 200 Connection Established, o TLS é terminado localmente com um certificado emitido para o host solicitado, e a requisição descriptografada é lida como uma requisição HTTP comum. Hosts correspondentes às opções de passthrough são repassados ao servidor real, sem terminar o TLS.Host.tokio::mpsc e a conexão aguarda em um canal oneshot até que o usuário a encaminhe. A requisição pode ser encaminhada como está, editada primeiro, ou enviada para o Repeater.webpki-roots para HTTPS), escreve a requisição e transmite a resposta bruta de volta ao cliente.Enter, escolhendo o transporte com base no protocolo com o qual a requisição foi capturada, e mostra a resposta lado a lado com a requisição.A TUI e o proxy nunca compartilham estado diretamente. Eles se comunicam apenas através dos canais de eventos, então a interface permanece responsiva enquanto as requisições estão sendo interceptadas.