Analisando Requisições de Rede com Wireshark

Em cenários onde APIs encapsulam erros, o desenvolvedor pode se deparar com mensagens de erro genéricas e pouco informativas, dificultando a identificação da causa raiz.


// Código SDK somente leitura
public static Data processarRetorno(String resultado) throws ErroAPIException {
    try {
        retornoEntidade = JSON.parseObject(resultado);
    } catch (Exception e) {
        throw new ErroAPIException(CodigoErroSistema.ERRO_INESPERADO);
    }
    if (retornoEntidade == null || retornoEntidade.obter("data") == null) {
        throw new ErroAPIException(CodigoErroSistema.ERRO_INESPERADO);
    }
    return retornoEntidade.obter("data", Data.class);
}

public static Data executarAPI(String nomeMetodo, Object parametros) throws ErroAPIException {
    return processarRetorno(obterConteudoURL(nomeMetodo, parametros));
}

// Implementação de exemplo
try {
    Data dados = executarAPI("nomeDaApi", parametros);
} catch (ErroAPIException e) {
    // A mensagem de erro exibida será apenas CodigoErroSistema.ERRO_INESPERADO, sem detalhes adicionais.
}

Para investigar a origem de tais problemas, a análise de pacotes de rede utilizando ferramentas como o Wireshark torna-se uma técnica valiosa. Se a função JSON.parseObject falhar, é provável que a resposta da API não seja um JSON válido, podendo ser um XML ou HTML.

Benefícios da Análise de Pacotes:

  1. Identificação da Origem do Erro: Determinar se o problema reside no cliente (sua aplicação) ou no provedor da API.
  2. Feedback Detalhado: Caso o erro seja do lado do provedor da API, a aálise permite fornecer informações precisas para que eles corrijam o problema. Isso também aumenta a confiança para retentar a operação.
  3. Diagnóstico de Erros no Cliente: Quando o erro é causado pela sua aplicação, a análise de pacotes auxilia na depuração e identificação do bug.

Capturando e Analisando Tráfego com Wireshark

Primeiro, faça o download e instale o Wireshark.

Configurando Filtros:

No Wireshark, você pode salvar expressões de filtro frequentemente usadas clicando no ícone de adição + ao lado do campo de filtro. Para gerenciar múltiplos filtros, acesse as "Preferências de Expressão de Filtro" no menu lateral.

Exemplo de Filtro para um Host Específico:

Para capturar tráfego destinado ao host blog.csdn.net, utilize o seguinte filtro:


http.host contains "blog.csdn.net"

Após aplicar o filtro, selecione um pacote de requisição HTTP. Em seguida, navegue até Seguir > Fluxo HTTP para visualizar todas as requisições e respostas TCP associadas a essa comunicação. Isso permite inspecionar claramente os dados retornados pela API.

Expressões de Filtro Úteis no Wireshark

  • Capturar Requisições HTTP:

    
    tcp.port == 80 || udp.port == 80
    
    

    Este filtro captura uma quantidade significativa de tráfego HTTP, o que pode ser excessivo em alguns casos.

  • Filtrar por Host e Caminho de Requisição Específico:

    
    http.host == "exemplo.com" and http.request.uri contains "/caminho/especifico"
    
    

    Este filtro é útil para isolar requisições HTTP locais que visam um host e um caminho de URI particulares.

  • Capturar Respostas de API Específica:

    
    ip.src_host contains "dominio.real.com" and http
    
    

    Este filtro exibe o tráfego HTTP de resposta vindo de um domínio específico para a sua máquina. O dominio.real.com deve ser o host real obtido através da análise de outras requisições.

Tags: Wireshark análise de pacotes depuração de rede HTTP protocolo tcp

Publicado em 7-5 17:41