Pular para o conteúdo

Regras de Reescrita e Pontos de Interrupção

A captura permite “observar”, as regras e os pontos de interrupção permitem “alterar”. O Trace Eagle coloca você como dono do seu tráfego: altere requisições sem escrever código, usando regras clicáveis simples e diretas para reescrever milhares de fluxos automaticamente; ou use pontos de interrupção para pausar e editar fluxos um de cada vez; somente para a lógica complexa que as regras genuinamente não conseguem expressar é que você precisa recorrer a scripts / plugins.


1. Regras de Reescrita (clique simples, alterações automáticas)

Seção intitulada “1. Regras de Reescrita (clique simples, alterações automáticas)”

A pior maneira de começar a alterar requisições é escrevendo um script. Aqui você não precisa: escolha uma ação em uma folha de referência e preencha um valor, e pronto, é uma regra: simples, intuitiva e aplicada no momento em que você a cria.

As regras são uma por linha, no formato <match> <action>://<value> (por exemplo *.example.com resHeaders://X-Debug: 1). Linhas em branco e comentários com # são ignorados, cada linha é validada individualmente, e as alterações são aplicadas a quente ao salvar; as regras podem ser organizadas em grupos nomeados e ativadas grupo por grupo. A interface vem com uma folha de referência clicável: um clique insere o exemplo correspondente, depois é só editar o valor, sem sintaxe para memorizar.

Regras de reescrita: uma regra por linha à esquerda, com suporte a grupos e comentários, uma folha de referência de ações clicável à direita (redirecionar / simular / editar cabeçalhos / impressão digital / ponto de interrupção, etc.)

  • Domínio exato: traceeagle.com (pode incluir um prefixo de caminho traceeagle.com/path)
  • Subdomínio curinga: *.traceeagle.com (corresponde ao domínio apex mais todos os subdomínios)
  • Regex contra a URL inteira: regex://…
  • URL completa exata: $https://host/path
  • Porta: :8080
  • Negação: prefixe qualquer correspondência com !

Direção da requisição

  • Redirecionar / encaminhar: alterar o IP de destino discado (host), mapear para uma URL completa diferente (map-remote, pode apontar para um servidor de desenvolvimento local), rotear através de um proxy http/socks5 upstream, ou restaurar as características de rede da requisição de um cliente para as de um cliente padrão (reprodução fiel).
  • Simular dados falsos: mock://200 ou mock://200|<body>, retorna uma resposta predefinida sem chegar ao servidor, uma mão na roda quando o frontend está esperando por uma API de backend.
  • Editar a linha da requisição / cabeçalhos: método, User-Agent, Referer, autenticação Basic, X-Forwarded-For, Content-Type / charset, Cookie, mesclar parâmetros de consulta, localizar e substituir na URL.
  • Editar o corpo da requisição: substituição total / localizar e substituir / anexar ao fim / anexar ao início / gravar em um arquivo local.

Direção da resposta

  • Editar status / cabeçalhos: alterar o código de status, adicionar ou remover qualquer cabeçalho de resposta, Set-Cookie, abrir o CORS com um clique, forçar o download de um anexo, controle de cache (desabilitar cache ou definir max-age), desabilitar Cookie/compressão/keep-alive, localizar e substituir em valores de cabeçalho.
  • Editar o corpo da resposta: substituição total / localizar e substituir / anexar ao fim / anexar ao início / mesclagem rasa de JSON.
  • Injetar por tipo: somente quando o Content-Type corresponde, injetar ou substituir scripts, estilos ou trechos em HTML / JS / CSS.

Rede e protocolo

  • Gravar em arquivo: além do corpo da requisição / resposta, a requisição / resposta bruta inteira também pode ser gravada em um arquivo local com um clique, para arquivamento ou análise offline.
  • Simulação de rede ruim: atraso da requisição / resposta (milissegundos), limitação de largura de banda (com predefinições 2G / 3G / 4G).
  • Reescrita de quadros WebSocket: substituição old=>new por direção (ambos os sentidos / cliente para servidor / servidor para cliente).
  • Reescrita de TCP / UDP bruto: substituição por direção em fluxos de bytes não-HTTP / datagramas SOCKS5 UDP.

Os valores das regras podem usar variáveis dinâmicas como ${url} ${host} ${port} ${method} ${status} ${now} ${random} ${randomUUID} ${req.headers.X} ${res.headers.X}, além de valores nomeados personalizados {name} (defina um valor comum uma vez, referencie-o em todos os lugares). Os valores nomeados {name} são usados principalmente em reescritas de requisição / resposta; os valores de substituição de reescrita de quadros WebSocket suportam ${...}.


Para fluxos que precisam de controle preciso, caso a caso, use um ponto de interrupção para pausar e abrir um editor antes de a requisição ser enviada ou antes de a resposta retornar.

  • Acionado por regra: use uma regra breakpoint://req|res|both para marcar com precisão quais fluxos interceptar.
  • Interruptor global de interceptação: ative a interceptação para a sessão inteira, depois, opcionalmente, restrinja o escopo com regras de filtro de interceptação (filtrar por domínio / método / estágio); sem regras, tudo é interceptado.
  • Estágio da requisição: método, URL (o host acompanha a URL), cabeçalhos, corpo.
  • Estágio da resposta: código de status, cabeçalhos de resposta, corpo da resposta.
  • Descartar diretamente: Abort descarta esta requisição / resposta (o cliente recebe um erro de gateway).
  • Fluxos que correspondem a múltiplos acertos entram em fila para você tratar: você pode retomar cada um (Resume), descartá-lo (Abort) ou retomar todos de uma vez. Fluxos deixados sem tratamento por muito tempo são retomados automaticamente sem alterações, de modo que o tráfego nunca fica preso indefinidamente.

Para lógica que as regras não conseguem expressar, delegue a um script ou plugin:

  • Scripts JavaScript: defina onRequest(req) / onResponse(resp) e edite os campos diretamente para surtir efeito. Os auxiliares embutidos incluem log, chamadas síncronas de saída para outros serviços, armazenamento de dados entre requisições (para contadores / tokens em cache), codificação/decodificação Base64 e muito mais.
  • Plugins de saída HTTP: use uma regra plugin://name para entregar a requisição / resposta ao seu próprio serviço de plugin para processamento (chamado via HTTP), e o plugin retorna o conteúdo reescrito (ou o simula diretamente). Independente de linguagem, adequado para equipes implementarem processamento personalizado em qualquer linguagem.

Um fluxo passa, nesta ordem, por: regras de requisição, scripts de requisição, plugins de requisição, ponto de interrupção da requisição, encaminhamento / simulação, regras de resposta, scripts de resposta, plugins de resposta, ponto de interrupção da resposta. O padrão é simples: primeiro as regras automáticas, depois os scripts, depois os plugins, e só por último um ponto de interrupção entra em cena manualmente, cada um fazendo o seu próprio trabalho sem atrapalhar os outros.


Voltar para Captura por Proxy · Relacionados: Compor e Reproduzir