Artigo do tipo Tutorial
Recursos especiais neste artigo:
Conteúdo sobre boas práticas
Porque esse artigo é útil
Este artigo descreve conceitos fundamentais sobre o Wireshark, anteriormente conhecido como Ethereal, um aplicativo GPL analisador de tráfego de redes.

Um analisador de tráfego captura as informações que estão sendo transmitidas em uma determinada rede e apresenta de forma detalhada cada pacote de dados capturado, organizando-os por tipo de protocolo. O Wireshark pode ser útil para aqueles que queiram monitorar o que está acontecendo em sua própria rede, examinar problemas de segurança, resolver problemas de implementação de protocolos ou mesmo por pessoas que estejam interessadas em aprender sobre o funcionamento de algum protocolo de rede específico.

O uso das redes de computadores em ambientes corporativos e educacionais se faz cada vez mais presente. Para que se mantenha um ambiente produtivo em funcionamento, torna-se necessário monitorar a rede, fazer o seu gerenciamento e administração. O Wireshark, capturador de pacotes antes conhecido como Ethereal, é provavelmente uma ferramenta indispensá­vel para administradores de redes que queiram uma análise mais detalhada sobre o que trafega em suas redes. Com ele, todo o tráfego de entrada e saída é analisado e mostrado em uma lista com diversos recursos de navegação.

O Wireshark é uma ferramenta de rede passiva, ou seja, não transmite bytes para a rede, nem é o destinatário de bytes que outros computadores enviaram. Durante sua instalação, disponível tanto para sistemas operacionais baseados em Unix quanto em ambientes Windows, é possível selecionar componentes adicionais, a começar pela interface gráfica, como por exemplo:

· TShark, um analisador de protocolo de rede baseado em modo texto;

· Plugins e extensões que ainda estão em caráter experimental;

· Ferramentas de linha de comando;

· Guia do usuário.

De maneira geral, todo analisador de pacotes é composto por duas partes: o módulo de captura de pacotes (Packet Capture Library) e o analisador de protocolos (Protocol Analyzer). No módulo de captura, é feita a cópia de todos os pacotes que atravessam a placa de rede pré-especificada para a memória do computador, enquanto o analisador de protocolos interpreta os cabeçalhos e conteúdos dos pacotes nos vários níveis da arquitetura de camadas das redes de computadores, como a arquitetura do modelo ISO/OSI. Como a maioria dos programas de captura de dados, o Wireshark utiliza a biblioteca Libpcap (veja o BOX 1), que oferece uma interface independente de sistema operacional e compatível com diversas tecnologias para capturar pacotes.

BOX 1. Libpcap

Muitas aplicações de apoio ao gerenciamento e segurança de redes fazem uso especificamente da captura passiva de tráfego, utilizando uma biblioteca de software chamada Libpcap, que é open source, portável e provê funcionalidades para captura de tráfego de dados e protocolos de redes.

Por padrão, o Wireshark utiliza interface gráfica, mas existe uma opção em modo texto, chamada TShark. O TShark é uma ferramenta compatível com diversos sistemas e com os filtros realizados na versão gráfica do Wireshark, que permite implementar rotinas automatizadas
usando linguagens de alto nível como Python e Perl. No Wireshark, a captura dos dados é feita em tempo real a partir de qualquer uma das interfaces de rede da máquina responsável pela coleta, como pode ser visto na Figura 1.

abrir imagem em nova janela

Figura ‎1. Lista de interfaces e início da captura de tráfego no Wireshark.

Na janela de interfaces, ao clicar no botão Options e selecionar a placa que será utilizada para fazer a captura, a opção
Capture all in promiscuous mode deverá ser escolhida para que o programa capture todas as informações em modo promíscuo, ou seja, na máquina onde o Wireshark estiver instalado, a placa de rede irá capturar todos os pacotes da rede atual, mesmo que esta informação não tenha como destino esta máquina. Um ponto que deve ser observado é que nem todas as interfaces de rede suportam trabalhar em modo promíscuo, devido a limitações do próprio hardware.

Ao iniciar a ferramenta, de maneira geral, podem-se verificar no Wireshark cinco partes principais, como mostra a Figura 2 e descritos a seguir:

1. Menu de comandos: são os menus localizados no topo da janela, como pode ser visto na Figura 3:

o File: expõe ao usuário ações básicas para abrir um arquivo de captura, salvar, exportar para os formatos suportados pelo Wireshark, entre outras funções;

o Edit: permite a marcação de pacotes, avançar a captura, busca e alterações na configuração do Wireshark;

o View: apresenta painéis e menus que podem ser visualizados e ocultados, configuração do tempo relativo, adição de colunas no painel de pacotes capturados e definir as cores por protocolos capturados;

o Analyze: apresenta para o usuário os filtros e protocolos que podem ser utilizados tanto na captura quanto na visualização das informações;

o Capture: lista as interfaces disponíveis para captura, opções de captura, iniciar, parar, reiniciar e filtros de captura;

o Statistics: permite que o usuário visualize estatísticas por protocolo, pacotes capturados, médias, filtro por tamanho do pacote, gráficos, contadores de pacotes, gráficos de fluxo, etc.;

o Telephony: é um menu dedicado aos protocolos utilizados pela tecnologia VoIP que mostra estatísticas de chamadas e parâmetros para medir a qualidade das chamadas;

o Tools: apresenta ferramentas para criar regras de filtro de pacotes;

o Internals: mostra ao usuário os protocolos e todos os filtros suportados pelo Wireshark;

o Help: é onde o usuário pode verificar a ajuda online, exemplos de capturas e versão da ferramenta.

2. Filtro: campo onde é possível inserir informações para especificar quais pacotes devem ser mostrados na janela com a sequência de pacotes;

3. Janela com a sequência de pacotes: apresenta uma linha para cada um dos pacotes capturados, com seu número (introduzido pelo Wireshark), instante em que foi capturado (em relação ao primeiro pacote), sua origem e destino, tipo de protocolo e alguma informação sobre o conteúdo do pacote;

4. Janela de análise de um pacote: apresenta detalhes sobre o pacote selecionado na janela com a sequência de pacotes, indicando os vários encapsulamentos a que foi sujeito, isto é, os cabeçalhos introduzidos pelas várias camadas. Detalhado nas colunas tem-se o número do pacote, tempo relativo, origem e destino do pacote, protocolo do pacote, tamanho e informações gerais do pacote. Estas colunas podem ser personalizadas;

5. Janela com o conteúdo de um pacote: contém o conteúdo do pacote selecionado na janela com a sequência de pacotes, em formato hexadecimal e ASCII.

abrir imagem em nova janela

Figura 2. Visão Geral do Wireshark.

Figura 3. Menu de Comandos disponíveis no Wireshark.

Por padrão, o Wireshark só apresenta opções para análise completa dos pacotes depois de finalizada a captura, mas é possível acompanhar o fluxo de pacotes “ao vivo”, e parar a captura assim que o pacote de interesse for capturado. O Wireshark pode exportar e importar dados em vários formatos, sendo um dos mais importantes o da Libpcap, que pode ser usado por várias ferramentas, o que facilita a leitura dos dados e posterior análise através de outros aplicativos compatíveis com esta biblioteca. Também é possível exportar os dados coletados para formatos como CSV, texto puro e PostScript, como pode ser visto na Figura 4.

Figura 4. Exportando informações capturadas no Wireshark.

Análise das informações capturadas

O Wireshark permite que se faça uma série de análises com base nos dados coletados. O item Analyze, selecionado na Figura 5, mostra algumas opções de criação e edição de filtros que podem, por exemplo, exibir detalhes de um determinado pacote. Este item permite também habilitar/desabilitar protocolos, criar regras de comando ACL (Access Control List – ver BOX 2) para vários firewalls diferentes e exibe informações de um determinado protocolo (TCP, UDP ou SSL) que são capturadas na mesma conexão que o pacote selecionado.

Figura 5. Tipos de Análises no Wireshark.

BOX 2. ACL

Access Control List ou Lista de Controle de Acesso é uma lista que define quem tem permissão de acesso a certos serviços da rede, determinando tipos de acesso para cada usuário ou grupo. Roteadores utilizam ACLs para filtragem de pacotes, seja ele de entrada ou de saída, TCP/UDP, entre outros protocolos.

Com o Wireshark é possível, por exemplo, verificar os sites que o usuário está visitando, assim como obter informações sobre qual sistema operacional e navegador o usuário está utilizando, conforme verificado na Figura 6. Como pode ser visto na linha do protocolo selecionado, no caso o protocolo HTTP, no campo que exibe o conteúdo deste pacote podemos observar que a máquina que fez este acesso é uma máquina com Mac OS X e o navegador Mozilla Firefox.

Figura 6. Análise de pacote no Wireshark: sistema operacional e navegador do usuário capturado.

Estatísticas dos protocolos coletados

O Wireshark provê uma grande variedade de estatísticas sobre a rede, disponibilizando informações gerais a respeito da captura dos dados da rede em análise, o número de pacotes capturados, estatísticas sobre protocolos específicos, hierarquia de protocolos coletados, tráfego de/para IPs específicos na rede, incluindo outras máquinas ou servidores, e apresenta gráficos para melhor visualização das informações sobre a rede.

Na opção Hierarchy Statistics, um subitem do menu Statistics, é possível verificar todos os protocolos capturados pelo Wireshark, com porcentagem individual para cada tipo encontrado, como demonstra o exemplo de análise mostrado na Figura 7. Este recurso apresenta diversas estatísticas que estão disponíveis sobre cada captura, a saber:

· Protocol: informa o nome do protocolo;

· % Packets: apresenta em forma de porcentagem a quantidade de pacotes do protocolo que foram capturados no total;

· Packets: determina o número absoluto de pacotes deste protocolo que foram encontrados na captura;

· Bytes: determina o tamanho em bytes dos pacotes deste protocolo;

· MBit/s: apresenta a quantidade de bits capturados por segundo de um determinado protocolo.

abrir imagem em nova janela

Figura 7. Exemplo de protocolos capturados no Wireshark.

O termo Endpoint no Wireshark é uma marcação que representa um ponto final entre dois endereços, levando em consideração um determinado protocolo ou interface de rede, com a finalidade de verificar o que foi enviado/recebido entre dois pontos definidos. Já em outras ferramentas de rede, os endpoints são chamados de host list ou lista de hosts. Para fins de análise, as estatísticas do Wireshark irão considerar os seguintes endpoints:

- Ethernet: corresponde ao endereço MAC;

- FDDI: corresponde ao endereço MAC FDDI;

- IPv4: corresponde ao endereço IP;

- TCP: combinação entre endereço IP e porta TCP usada. Vale ressaltar que diferentes portas TCP no mesmo endereço IP indicam endpoints TCP diferentes;

- Token Ring: endereço MAC do Token Ring;

- UDP: combinação do endereço IP e da porta UDP.

Quando se tem uma comunicação na rede, o Wireshark interpreta como sendo um tráfego entre dois endpoints específicos, ou seja, duas interfaces de rede ou endereços IPs específicos que estão se comunicando e trocando informações entre si. A janela de conversações pode ser acessada no menu Statistics > Conversation, onde se tem o endereço A e o endereço B dos dois endpoints que estão sendo analisados.

A Figura 8 mostra uma conversação Ethernet, a Figura 9 uma conversação IPv4 e a Figura 10 uma conversação UDP. Nessas conversações é possível verificar qual a quantidade de pacotes e bytes que foram recebidos no total, qual a quantidade de pacotes e bytes que foram recebidos no total do endereço A para o endereço B e vice-versa, qual a duração da comunicação entre os endpoints e a quantidade de tráfego em bits por segundo do endereço A para o endereço B e vice-versa.

Com isso, é possível verificar se o endereço A ou o endereço B estão realmente conectados e transmitindo dados entre si, se houve ou não perda de dados na comunicação, visualizar dados sobre as interfaces de rede dos endereços A e B, entre outras informações.

abrir imagem em nova janela

Figura 8. Exemplo de conversação Ethernet no Wireshark.

abrir imagem em nova janela

Figura 9. Exemplo de conversação IPv4 no Wireshark.

abrir imagem em nova janela

Figura 10. Exemplo de conversação UDP no Wireshark.

Utilizando filtros

Dependendo da rede analisada, a quantidade de informações pode ser incrivelmente grande. Pensando nesta possível dificuldade, um dos recursos mais poderosos do Wireshark é justamente a possibilidade de se criar filtros para limitar o número de pacotes visíveis, para que a quantidade de informações não úteis não seja “ensurdecedora”. Para limitar as informações e ser mais específico no que será analisado, é possível construir expressões para realizar essa filtragem, como pode ser visto na Figura 11. O próprio site do Wireshark também possui uma lista com vários filtros disponíveis para análise de alguns protocolos. Se algum novo protocolo for criado pelo IETF, existe a possibilidade de inserção de novos filtros.

abrir imagem em nova janela

Figura 11. Filtragem de pacotes TCP no Wireshark.

Ao abrir a janela de expressões para os filtros é exibida uma lista com os nomes dos campos organizada por protocolos e uma caixa para selecionar as relações que se deseja analisar. Clicando no "+" do lado do protocolo, aparece uma lista com os tipos de filtros para este protocolo, e na caixa de relação existe uma lista de operadores disponíveis (“==”, “!=”, “>”, etc.). A relação is present, por exemplo, é uma relação unária que é verdadeira quando o campo selecionado está presente no pacote. Todas as outras relações são binárias e precisam de dados adicionais. Quando uma delas é selecionada, torna-se indispensável digitar um parâmetro que deverá ser utilizado para a comparação. Por exemplo, alguns protocolos já têm parâmetros pré-definidos por serem os mais utilizados, sendo necessário escolher algum destes valores para criar o filtro desejado, como pode ser visto nos exemplos a seguir. Os operadores lógicos que podem ser empregados junto aos filtros são apresentados na Tabela 1.

Tabela 1. Operadores e valores lógicos utilizados para a criação de filtros no Wireshark.

Como exemplo, pode-se digitar no campo Filter do Wireshark os seguintes comandos para filtrar o tráfego da web:

tcp.dstport == 80 or tcp.dstport == 443

ou

tcp.port == 80 and ip.src == 192.168.1.1

ou

http.host eq "www.mulheresnatecnologia.org"

No primeiro exemplo, é possível filtrar apenas os pacotes trafegados pela porta 80 (utilizada pelo protocolo HTTP) ou 443 (utilizada pelo protocolo HTTPS) do protocolo TCP. O segundo exemplo permite filtrar o tráfego da porta 80 do protocolo TCP vinda do endereço 192.168.1.1. Já o terceiro exemplo de filtro permite selecionar todas as informações capturadas do host "www.mulheresnatecnologia.org".

Outro filtro pode selecionar componentes específicos de uma conexão HTTP, como por exemplo, um código de resposta (mostrar apenas erros 404):

http.response.code == 404

As capturas feitas pelo TShark também utilizam a mesma sintaxe da Libpcap, conforme demonstra o comando:

TShark -f "filtro"

Nele, filtro é o que se deseja selecionar no tráfego capturado. Por exemplo, para apresentar qualquer pacote UDP que use a porta 53, o comando seria:

TShark -f "udp port 53"

Já para filtrar respostas HTTP 404 (página não encontrada), como mostrado no Wireshark, a sintaxe para o TShark ficaria:

TShark -R "http.response.code == 404"

O Wireshark também permite filtros específicos para analisar chamadas VoIP. Em Telephony – Voip Calls, para preparar um filtro para uma determinada chamada, basta selecionar a chamada desejada e pressionar o botão Prepare Filter. Isto irá criar um filtro na janela principal do Wireshark para selecionar os pacotes relacionados a essa chamada em análise, como mostra a Figura 12. A partir desses dados é possível verificar características do ambiente VoIP e monitorar se a comunicação está dentro dos parâmetros de inteligibilidade e disponibilidade para os usuários.

abrir imagem em nova janela

Figura 12. Filtragem de chamadas VoIP no Wireshark.

Após aplicar o filtro para listar as chamadas VoIP encontradas na captura, tem-se as seguintes informações por chamada:

· Start Time: Hora de início da chamada;

· Stop Time: Hora de término da chamada;

· Initial Speaker: O IP de origem do pacote que iniciou a chamada;

· From: Para chamadas H323 e ISUP, este é o número de quem originou a chamada. Para chamadas SIP, é o campo "De" do convite;

· To: Para chamadas H323 e ISUP, este é o número chamado. Para chamadas SIP, é o campo "Para" do convite;

· Protocol: Define um dos protocolos listados acima;

· Packets: Apresenta o número de pacotes envolvidos na chamada;

· State: Estado da chamada atual. Os valores possíveis são CALL SETUP (chamada em estado de configuração); RINGING (chamada tocando); IN CALL (chamada em curso); CANCELLED (chamada foi liberada antes de conectar com o usuário de destino); COMPLETED (chamada foi efetuada e, em seguida, liberada); REJECTED (chamada foi liberada antes de conectar ao destino); e UNKNOWN (chamada em estado desconhecido).

Na Figura 13 é possível visualizar os dados de uma conversação VoIP que utiliza o protocolo RTP, como por exemplo, os tipos de codecs da conversação, a perda de pacotes e o atraso. Com esses dados coletados temos informações úteis para prover ajustes para a melhoria da comunicação. Visando auxiliar esta configuração, na literatura existem parâmetros de referência para verificar a qualidade do serviço de comunicação VoIP (veja a Tabela 2).

abrir imagem em nova janela

Tabela 2. Parâmetros utilizados como referência para medir a qualidade de uma comunicação VoIP.

abrir imagem em nova janela

Figura 13. Informações sobre chamadas VoIP no Wireshark.

O Wireshark apresenta ainda um player para dados do protocolo RTP que permite remontar a conversação realizada em servidores VoIP que não utilizam nenhum mecanismo de criptografia, como apresentado na Figura 14. A partir deste player é possível ouvir a conversa original na íntegra.

Figura 14. Player para remontagem de chamadas VoIP no Wireshark.

Conclusão

O Wireshark é uma ferramenta livre que permite a análise de protocolos, podendo auxiliar administradores de rede na resolução de problemas. Ele realiza a captura e análise de informações trafegadas em diferentes tipos de meios de transmissão, sejam eles cabeados ou não, com a vantagem de compatibilidade entre os mais diversos sistemas operacionais. Além disso, por meio do Wireshark, torna-se possível conhecer diversas características e o funcionamento de vários tipos de protocolos. O conhecimento aprofundado dos protocolos proporciona a criação de novas ferramentas, uma melhor utilização dos recursos de cada protocolo e maior compatibilidade entre tecnologias.

Links

Wireshark - What's on your network? (O que tem em sua rede?)
http://www.wireshark.org

Referências de Filtros no Wireshark
http://www.wireshark.org/docs/dfref/

IETF – Internet Engineering Task Force
http://www.ietf.org