Introdução
A análise de tráfego de rede frequentemente exige a extração de informações específicas de milhares de pacotes. Embora a leitura de resumos de pacotes seja útil para humanos, ferramentas e scripts automatizados exigem dados estruturados.
É aqui que a análise de pacotes começa a se sobrepor à engenharia de dados. Um humano pode examinar visualmente algumas linhas de pacotes, mas os computadores funcionam melhor quando as informações estão organizadas em campos e colunas estáveis. Uma vez que o tráfego de rede é convertido em uma saída estruturada, ele pode ser pesquisado, contabilizado, representado graficamente, importado para planilhas ou processado por pipelines de Python e SIEM.
Neste laboratório, você aprenderá a transformar o tráfego de rede bruto em formatos estruturados e fáceis de analisar usando o tshark, a versão de linha de comando do Wireshark. Você praticará a desativação da saída padrão legível por humanos, a seleção de campos de protocolo específicos (como endereços IP, consultas DNS e User-Agents HTTP) e a formatação dos resultados em Valores Separados por Vírgula (CSV) para análise posterior.
Desativar a Saída Padrão
Nesta etapa, você aprenderá como alterar o comportamento de saída padrão do tshark.
Por padrão, ao ler um arquivo de captura de pacotes usando o tshark, ele imprime uma linha de resumo para cada pacote. Esse resumo é projetado para leitura humana, mas é muito difícil de analisar usando scripts ou importar para bancos de dados. Para extrair dados específicos, primeiro precisamos dizer ao tshark para parar de imprimir esse resumo padrão e, em vez disso, preparar-se para exibir campos específicos.
A ideia principal é que os resumos são orientados para a apresentação, enquanto os campos são orientados para a análise. Uma linha de resumo pode parecer conveniente para uma pessoa, mas pequenas alterações na formatação podem quebrar a automação posterior. A extração de campos nomeados oferece uma saída previsível que outras ferramentas podem consumir de forma confiável.
Conseguimos isso usando a opção -T fields. O sinalizador -T significa "Text output format" (formato de saída de texto), e defini-lo como fields informa ao tshark que queremos ver apenas os campos de dados exatos que especificarmos.
No entanto, se você usar apenas -T fields sem especificar quais campos deseja, o tshark não exibirá nada. Você deve combiná-lo com o sinalizador -e, que especifica o campo exato a ser extraído.
Vamos começar extraindo apenas o número do quadro (frame number) do nosso arquivo de captura de exemplo. Certifique-se de estar no seu diretório de trabalho padrão /home/labex/project.
Execute o seguinte comando para ler o arquivo sample.pcap e extrair apenas os números dos quadros:
tshark -r sample.pcap -T fields -e frame.number | head -n 5
O sinalizador -r diz ao tshark para ler de um arquivo em vez de capturar tráfego em tempo real. A parte | head -n 5 do comando limita a saída às primeiras 5 linhas para que seu terminal não seja inundado com números.
Você deverá ver uma saída semelhante a esta:
1
2
3
4
5
Observe como a saída é limpa em comparação com o resumo padrão do tshark. Esta é a base para a construção de conjuntos de dados estruturados a partir do tráfego de rede.
Usar Formatação de Coluna Personalizada
Nesta etapa, você aprenderá como extrair vários campos simultaneamente e formatá-los como Valores Separados por Vírgula (CSV).
Ao usar vários sinalizadores -e, o tshark extrairá vários campos e os colocará em colunas. Por padrão, o tshark separa essas colunas usando um caractere de "Tabulação". Embora valores separados por tabulação sejam úteis, o CSV é o padrão universal para importar dados para planilhas, bancos de dados e ferramentas de análise como o Pandas do Python.
Isso pode parecer um detalhe de formatação, mas a escolha do formato molda o que você pode fazer a seguir. O trabalho de segurança geralmente envolve mover dados entre analisadores de pacotes, pipelines de shell, planilhas, notebooks e painéis. Quanto mais fácil for importar sua saída para outros lugares, mais fácil será escalar um comando único para um fluxo de trabalho repetível.
Para alterar o caractere que separa as colunas, usamos a opção -E separator=.
Vamos extrair o número do quadro, o endereço IP de origem e o endereço IP de destino, e formatá-los como um CSV. Os nomes dos campos para IPs de origem e destino são ip.src e ip.dst.
Para garantir que estamos observando pacotes que realmente possuem endereços IP (e ignorar coisas como pacotes ARP de baixo nível que não possuem), usaremos o filtro -Y "ip" junto com nossa extração de campo.
Execute o seguinte comando no seu terminal:
tshark -r sample.pcap -Y "ip" -T fields -e frame.number -e ip.src -e ip.dst -E separator=, | head -n 5
Você deverá ver uma saída semelhante a esta:
12,127.0.0.1,127.0.0.11
13,127.0.0.11,127.0.0.1
14,127.0.0.1,127.0.0.11
15,127.0.0.11,127.0.0.1
16,172.60.1.88,104.18.26.120
Como filtramos os pacotes ARP iniciais, você notará que os números dos quadros podem não começar em 1. Às vezes, um pacote pode não conter um campo específico e, nesses casos, o tshark simplesmente deixará essa coluna em branco, garantindo que sua estrutura CSV permaneça intacta.
Extrair Consultas DNS
Nesta etapa, você combinará a extração de campos com filtros de exibição para isolar e extrair informações específicas do tráfego DNS.
Ao analisar o tráfego de rede, raramente você deseja extrair campos de todos os pacotes. Geralmente, você está interessado em um protocolo específico. Você pode usar o sinalizador -Y para aplicar um filtro de exibição antes de extrair os campos.
Este é outro exemplo de redução de escopo antes de interpretar os resultados. Se você misturar protocolos não relacionados em uma única exportação, a saída se tornará esparsa e confusa, pois muitos pacotes não conterão os campos solicitados. Filtrar primeiro mantém o conjunto de dados resultante semanticamente coerente.
Por exemplo, se quisermos ver quais sites um usuário está tentando visitar, podemos observar suas consultas DNS. O filtro de exibição para tráfego DNS é simplesmente dns. O campo específico que contém o nome de domínio sendo consultado é dns.qry.name.
Vamos extrair o endereço IP de origem e o nome da consulta DNS, mas apenas para pacotes que são realmente solicitações ou respostas DNS.
Execute o seguinte comando:
tshark -r sample.pcap -Y "dns" -T fields -e ip.src -e dns.qry.name -E separator=, | head -n 5
Sua saída será semelhante a esta:
10.0.2.15,labex.io
168.63.129.16,labex.io
10.0.2.15,google.com
168.63.129.16,google.com
Ao combinar -Y "dns" com -T fields, garantimos que nossa saída CSV contenha apenas dados relevantes, filtrando todo o ruído de fundo de outros protocolos de rede.
Extrair User-Agents HTTP
Nesta etapa final, você extrairá informações detalhadas do tráfego HTTP, focando especificamente na string User-Agent.
O User-Agent é uma string enviada por um navegador da web ou cliente para o servidor, identificando o software que está sendo usado (por exemplo, Chrome, Firefox ou um script personalizado). Analistas de segurança frequentemente extraem User-Agents para identificar scripts automatizados maliciosos ou navegadores desatualizados em uma rede.
Metadados como o User-Agent são úteis porque fornecem pistas sobre o comportamento sem exigir que você inspecione cada byte de conteúdo. Na defesa de rede, muitos julgamentos úteis vêm de campos de contexto, como user agent, host header, nome do servidor TLS ou nome da consulta DNS. Eles ajudam os analistas a separar o tráfego normal de aplicativos da automação suspeita.
Para isolar solicitações HTTP, podemos usar o filtro de exibição http.request. Os campos que queremos extrair são o IP de origem (ip.src), o domínio do host solicitado (http.host), o caminho da URI específica (http.request.uri) e a string User-Agent (http.user_agent).
Execute o seguinte comando para extrair esses metadados HTTP em um formato CSV:
tshark -r sample.pcap -Y "http.request" -T fields -e ip.src -e http.host -e http.request.uri -e http.user_agent -E separator=,
Você deverá ver uma saída semelhante a esta:
10.0.2.15,example.com,/,curl/7.81.0
10.0.2.15,neverssl.com,/,LabEx-Custom-Agent/1.0
Observe como extraímos com sucesso o User-Agent personalizado LabEx-Custom-Agent/1.0 que foi gerado durante a configuração do laboratório. Essa técnica é incrivelmente poderosa para criar relatórios automatizados ou alimentar dados de rede em painéis de monitoramento de segurança.
Resumo
Neste laboratório, você aprendeu como transformar capturas de pacotes de rede brutos em dados estruturados e analisáveis usando o tshark. Você começou desativando a saída padrão legível por humanos usando -T fields. Em seguida, aprendeu a selecionar pontos de dados específicos usando o sinalizador -e e a formatá-los em CSV usando -E separator=,. Finalmente, você combinou essas técnicas de formatação com filtros de exibição (-Y) para extrair informações altamente específicas, como nomes de consultas DNS e strings User-Agent HTTP. Essas habilidades são essenciais para automatizar a análise de rede e integrar dados de pacotes com outras ferramentas de segurança.

