Permitido
Corpo pode gravar
Host na lista allowed. Fetch/XHR com Corpos ligado. Replay só dispara se o destino continuar no escopo.
Manual de campo · 02 out 2026
O Network Listener grava o tráfego do Chrome no seu servidor e mostra no dashboard o que o alvo já chamou. Este guia percorre cada tela com print de uma sessão de laboratório — o mesmo fluxo que você usa num programa com regras escritas.
EX-00
Quatro peças: extensão no Chrome (captura), servidor SQLite (guarda), dashboard (lê, compara, exporta) e o app desktop Tauri que empacota servidor + dashboard numa janela local. Tudo amarrado a um programa — o workspace com hosts permitidos e excluídos.
| Ferramenta | Para que serve | Onde |
|---|---|---|
| Login | Entra no dashboard com a conta admin (ou viewer). | Dashboard |
| Popup da extensão | Liga captura e corpos, escolhe o programa, marca sessão, aponta o servidor. | Ícone da extensão |
| App desktop | Janela nativa que sobe o servidor local e abre o mesmo dashboard. SQLite no Application Support. | apps/desktop-spike |
| Programa / workspace | Define o alvo autorizado. Fora da lista, o corpo não grava e a linha sai como FORA DO ESCOPO. | Header + popup |
| Ao vivo | Timeline do que o browser fez: método, path, host, status, tipo. | Nav Ao vivo |
| Filtros | Recorta por URL, host, tipo (Fetch/XHR, JS, Doc), método, status, erros, corpos. | Barra acima da tabela |
| Detalhe | Headers, cookie, token, corpo enviado e recebido de uma request. | Clique na linha |
| Replay | Reenvia a request (método, URL, headers, corpo) com a guarda de escopo. | Painel do detalhe |
| Comparar 2 linhas | Diff de URL, status, headers e corpos entre duas capturas. | Checkboxes CMP |
| Nova sessão | Marca um instante. O inventário e o diff de sessões usam esses recortes. | Popup · nova sessão |
| Comparar sessões | O que a API mostrou só em A, só em B, ou com status diferente. | Nav Endpoints |
| Visto no JS/HTML | URL que o bundle cita e a sessão ainda não chamou. | Nav Endpoints |
| Inventário | Superfície da API: path normalizado, GraphQL operationName, qtd, evidência. | Nav Endpoints |
| Achados | Caderno local do bug, com requests anexadas e relatório Markdown. | Nav Achados |
| Exportar dump | CSV ou HAR da sessão, com ou sem corpos, mascarando credenciais. | Header · exportar |
| Importar HAR | Joga no programa um HAR do DevTools, Burp ou outro browser. | Header · importar HAR |
| Cifra | Criptografa capturas em disco. Banner pede confirmação para apagar o claro. | Banner no topo |
EX-01
Para que serve. Abre o dashboard. Super admin vê e apaga; viewer só lê (wipe, limpar e confirmar cifra ficam bloqueados).
O super admin nasce das variáveis SUPER_ADMIN_EMAIL e SUPER_ADMIN_PASSWORD no deploy. Oito falhas de senha no mesmo IP+e-mail em 15 min viram 429 com Retry-After.
EX-02
Para que serve. É o gravador. Sem o popup ligado no programa certo, o dashboard fica vazio.
Três chaves no topo: Capturar (liga o collector), Corpos (guarda fetch/XHR até o limite) e Mascarar (substitui tokens e senhas antes de gravar). Contadores mostram capturadas, enviadas, fila e requests sem corpo. A fila local segura o lote se o servidor cair, com backoff até 60 s.
Workspace autorizado precisa estar escolhido antes da nova sessão. Servidor é a URL do API (produção: o host do app). Token de acesso é o token de ingestão — só envia captura, separado da senha do dashboard. Limite por corpo padrão 128 kB (teto 150 kB). Corpos só nestes hosts restringe ainda mais o que entra no disco.
Nova sessão carimba um instante. Use no começo do fluxo anônimo e de novo depois do login — o diff de sessões vive desses dois carimbos.
EX-03
Para que serve. É a janela nativa do listener: sobe o Fastify + SQLite no seu Mac e abre o mesmo dashboard, sem depender do host de produção. Fecha a janela, o Node encerra junto e o banco fica no Application Support — sem processo órfão e sem WAL sujo.
O spike vive em apps/desktop-spike (fora do workspace npm e da CI). Tauri só inicia e encerra o backend TypeScript como filho — o servidor não foi reescrito em Rust.
cd apps/desktop-spike npm run dev # cargo tauri dev npm run build # .app + .dmg no macOS
A janela aponta para http://127.0.0.1:4820. Se a 4820 já estiver ocupada, o app para com diagnóstico em vez de um stack de EADDRINUSE; com PORT=0 o SO escolhe outra e você cola essa porta no popup, campo Servidor.
macOS: ~/Library/Application Support/sh/network-listener/network-listener/network.db. Windows e Linux têm o equivalente em APPDATA / XDG, mas o bundle atual só gera .app e .dmg. Cifra em disco usa o Keychain no Mac, igual ao servidor solto.
Ainda é spike: sem instalador Windows/Linux, sem notarização, depende do Node 22 do sistema. A extensão MV3 continua obrigatória para capturar. Produção no Cleat segue em network-listener.apps.gestaobem.com.
EX-04
Para que serve. É o contrato do alvo: nome, URL das regras, hosts permitidos, hosts excluídos. A sessão da extensão fica vinculada ao programa ativo. Trocar de programa com captura ligada pede confirmação.
No header: seletor Workspace, novo programa, bloquear (solta o vínculo até reabrir) e limpar programa (apaga capturas e achados daquele programa, com dois confirms). O formulário pede nome, URL das regras, hosts permitidos (obrigatório, aceita *.api.example.com), hosts excluídos e notas.
Na demo: permitidos shop.example.com, api.shop.example.com, cdn.shop.example.com. Excluído admin.shop.example.com — por isso GET /metrics aparece com o selo FORA DO ESCOPO e o corpo não entra.
Permitido
Host na lista allowed. Fetch/XHR com Corpos ligado. Replay só dispara se o destino continuar no escopo.
Excluído ou fora
A request ainda aparece na timeline para você ver o que o browser tocou. O conteúdo não é persistido.
EX-05
Para que serve. É o rádio da sessão: cada request que passou pelo collector, com cards de volume, tempo médio, top hosts e taxa de erro.
Filtros no meio: busca por URL ou host, período, host, tipo (Fetch/XHR, Doc, JS…), método, faixa de status, “só erros”, “corpos”. A tabela mostra status, método, caminho, host, tipo, duração. Pausar a atualização congela o polling — útil na hora de marcar duas linhas para o diff.
Header: bloquear, limpar programa, intervalo de atualização, atualizar, importar HAR, exportar, limpar base. Limpar base é wipe global — só super admin.
EX-06
Para que serve. Abre a prova: URL completa, request id, origem (captura ou import), escopo, headers (Authorization, cookie) e corpos. É daqui que você anexa evidência no achado e dispara o replay.
Na mesma request a resposta veio {"id":41,"email":"bruno@lab.test","role":"admin"} autenticado como outro usuário — o IDOR da demo. Copiar URL e copiar request aceleram o relatório.
EX-07
Para que serve. Reenvia a captura contra o destino (método, URL, headers, corpo) para confirmar o bug sem montar o curl na mão. O servidor recusa destino fora do workspace ativo.
GET e HEAD seguem sem corpo (o fetch do Node rejeita body nesses métodos). Credenciais listadas embaixo do textarea de headers. O botão confirma o método e a URL antes de disparar.
EX-08
Para que serve. Marca duas requests na coluna CMP e o painel alinha URL, método, status, headers e corpos. JSON entra estrutural primeiro. Campos voláteis (ts, requestId, data.token) você ignora na caixa do topo.
Na demo: #7 GET /v1/users/me (eu) × #10 GET /v1/users/41 (outro id). Mesmo token, mesmo 200, path diferente, PII do admin no segundo.
EX-09
Para que serve. Mostra o que a API revelou antes e depois de um recorte (login, troca de conta, checkout). Cada “nova sessão” no popup vira um marco. A janela A é [marco 1, marco 2); a B é [marco 2, agora).
Três blocos: só na sessão A, só na sessão B, status mudou. GraphQL aparece com o operationName — na demo, GetCart no anônimo e GetOrders no logado.
Os dois selects no canto escolhem quais marcos comparar se você marcou mais de dois.
EX-10
Para que serve. Extrai URLs http(s) e caminhos /api/ dos bundles e documentos capturados. Só no JS é superfície que o front conhece e a sessão ainda não chamou. Chamado já apareceu na timeline.
Na demo o app.js cita /v1/export, /v1/internal/flags, /api/admin/users, /api/v1/search, /api/config.js. São os próximos alvos manuais — o listener aponta, você decide se chama (dentro do programa).
EX-11
Para que serve. Compacta a sessão numa superfície de API: método + host + path normalizado (int, uuid, id opaco vira {int} / {uuid}). GraphQL ganha coluna de operação. Exporta CSV e JSON. Teto de 50 mil requests na agregação — o dashboard avisa se cortar.
Cada linha tem botão de evidência com o id da request, para pular no detalhe ou anexar no achado. Na demo, GET /v1/users/{int} é o IDOR; POST /graphql · GetOrders é a query autenticada.
EX-12
Para que serve. Caderno do bug no próprio programa: título, severidade, estado (confirmed, etc.), impacto, passos, evidências (requests por id). Relatório Markdown mascarado por padrão; “relatório com segredos” se você realmente precisa dos tokens. Nada sobe para plataforma externa.
Novo achado pelo botão no canto. Excluir some só do caderno local. Viewer lê; quem escreve precisa de papel com write.
EX-13
Para que serve. Tira a sessão do dashboard para um agente, um ticket ou o Burp. CSV para grep e planilha; HAR para replay em outra ferramenta.
Escolhas: com detalhes (headers e corpos) ou menos dados; recorte pelos filtros atuais, pela sessão marcada, ou janelas de 10 min até 12 h; só fetch/XHR; mascarar credenciais (authorization, cookie, x-goog-visitor-id — os corpos saem como foram gravados).
EX-14
Para que serve. Entra no programa um HAR 1.2 do Chrome DevTools, Firefox, Safari ou Burp — tráfego que a extensão não viu (outro browser, curl via proxy do Burp, sessão antiga). Precisa de programa ativo; senão o botão fica desabilitado.
O arquivo tem que ser JSON. O dashboard mostra um resumo do que entrou. Origem da request no detalhe passa a “import” em vez de “captura”. Inventário, visto no JS e achados enxergam o import igual ao resto.
Proxy MITM local ficou de fora de propósito: HAR cobre o caso “vim de outra ferramenta”. Replay cobre o caso “quero reenviar esta linha”.
EX-15
Para que serve. No macOS a chave vive no Keychain; no Linux você passa NL_DATA_KEY. Capturas novas entram cifradas. O banner no topo avisa quantas linhas ainda estão em texto puro e pede confirmar cifra (apaga o claro) ou desfazer.
Viewer não confirma nem desfaz. Token de ingestão da extensão também não — só a conta admin do dashboard. Confirmar é irreversível para aquelas cópias em claro.
EX-16
Ordem que fecha o ciclo, da instalação ao relatório. As prints desta página seguem exatamente esses passos na demo Alvo Shop.
apps/desktop-spike) ou aponta a extensão para o host do Cleat.
No popup, o campo Servidor é http://127.0.0.1:4820 (janela local) ou https://network-listener.apps.gestaobem.com.
O listener é passivo: grava o que o browser (ou o HAR) já fez. Corpo teto 128 kB (150 kB no schema). Retenção padrão 3 dias (1–90), sweep de hora em hora. Lote da extensão: no máximo o batch e 2 MB por envio. Sem circuit breaker — fila local quando o servidor cai.
Papéis: super admin apaga e confirma cifra; viewer lê. Token de ingestão autentica a extensão e para no envio — wipe e confirmação de cifra ficam na conta do dashboard.