PackETH – Ferramenta para gerar pacotes de rede

PackETH – Gerando pacotes de rede

O packETH é um software gerador de pacotes de rede que permite criar e enviar quaisquer tipos de pacotes, totalmente personalizados campo a campo, em uma rede Ethernet.
Com ele podemos ajustar inúmeros parâmetros e então enviar o pacote (ou sequência de pacotes) pela rede, sendo uma ferramenta muito útil para realização de testes em redes e estudo de protocolos.
O packETH pode ser obtido no site http://packeth.sourceforge.net/packeth/Home.html, e possui versões para Windows, Mac e Linux. A versão mais recente é a 1.8.1 (para Linux), sendo as versões para Windows e Mac ligeiramente mais antigas (até o momento).

Características básicas do packETH:
Protocolos suportados:

  • Ethernet II, 802.3, 802.1q, quadros ethernet definidos pelo usuário
  • ARP, IPv4, IPv6
  • UDP, TCP, ICMP, ICMPv6, IGMP
  • RTP e quadros Jumbo

É possível também ajustar diversos parâmetros nos pacotes, tais como:

  • Atraso entre pacotes
  • Número de pacotes a enviar
  • Velocidade de envio
  • Alterar parâmetros ao enviar, como endereços IP e MAC, entre outros

E ainda é possível salvar configurações em um arquivo e carregar essas configurações posteriormente, além de suportar o formato pcap.

O software possui versões para interface gráfica (GUI) e linha de comandos (CLI). Neste tutorial vou usar a versão para interface gráfica.

Para instalar o packETH, clique no link a seguir, que o levará à página de downloads, onde você poderá escolher a versão mais adequada a seu sistema:

Download do packETH

Se você estiver utilizando alguma distribuição Linux, é possível que o packETH esteja presente nos repositórios de sua distro. Como vou utilizar o Linux Debian nos exemplos, irei instalá-lo via apt-get. Para isso, usarei o comando a seguir (funciona também no Ubuntu e derivados):

$ sudo apt-get install packeth

Caso você queira usar a versão para Windows, sua instalação é bem simples e básica: basta baixar o pacote zipado, extrair seu conteúdo em uma pasta qualquer do sistema, e então executar o arquivo packETH.exe. Porém, você deve estar ciente do seguinte: as versões para Windows e OS X foram portadas por terceiros, e possuem alguns bugs. Por isso, recomendamos utilizar a versão para Linux, para que o software possa ser utilizado sem nenhum tipo de problemas e com todos os seus recursos funcionais.

Observação: Caso apareça o erro “O programa não pode ser iniciado porque está faltando wpcap.dll no seu computador”, você precisará instalar a biblioteca WinPcap para que seja possível utilizar o packETH. Clique aqui para baixar o WinPcap (para Windows). Se preferir, visite o site oficial do projeto WinPcap.

Erro de falta de dll WinPcap

Erro: falta biblioteca e driver WinPcap

Após instalar a biblioteca WinPcap (instalador corriqueiro – execute-o e siga as instruções para instalá-lo), tente abrir novamente o packETH.

Como citado, neste artigo vou usar a versão para Linux. Veja a tela inicial do programa aberto abaixo (é necessário privilégios de administrador para poder enviar os pacotes):

packETH no Linux Debian

A barra de ferramentas nos permite acessar os vários modos de funcionamento do programa. Veja abaixo a barra de ferramentas e a seguir uma descrição sucinta de cada um de seus botões:

Barra de Ferramentas do packETH

  • Builder – Modo de construção dos pacotes / quadros
  • Gen-b – Especificar número de pacotes a enviar, atraso, offset e CRC
  • Gen-s – Especificar tipos diferentes de pacotes, no formato pcap.
  • Pcap – Permite carregar pacotes capturados previamente com Wireshark (ou tcpdmp, etc)
  • Load – Abre uma caixa de diálogo para selecionar pacotes a serem carregados no Builder
  • Save – Salvar o pacote definido atualmente no Builder
  • Default – Carrega o pacote que foi armazenado por último com o botão Default (Salvar)
  • Default (Salvar – símbolo do disquete) – Salvar o pacote aberto atualmente para que possa ser utilizado posteriormente
  • Interface – Permite escolher a interface de rede a ser utilizada no envio dos pacotes
  • Send – Enviar os pacotes
  • Stop – Parar o envio dos pacotes

Criando pacotes com packETH

Vamos criar um pacote de exemplo simples e enviá-lo pela rede. As configurações do equipamento que utilizarei são as seguintes:

  • Host onde o pckETH será executado: Linux Ubuntu, com IP 192.168.1.114/24 e MAC Address 08:00:27:6c:c0:f4
  • Wireshark instalado neste host, para capturar e analisar os pacotes gerados
  • Host de destino: será meu gateway, de IP 192.168.1.1/24 e MAC Address c8:d7:19:ee:2a:17

Vou criar um pacote ICMP Echo request (“ping”) e  enviarei do meu host ao meu roteador. Para isso, vamos configurar os campos nas camadas de Enlace e Internet do pacote, de acordo com os dados a seguir:

Camada de Enlace

  • Ethernet ver. II
  • MAC de destino: c8:d7:19:ee:2a:17
  • MAC de origem: 08:00:27:6c:c0:f4
  • Ethertype: 0x0800 (IPv4)

Próxima camada (Next layer): IPv4

packETH - Camada de Enlace

Camada de Internet

  • Versão: 4
  • Comprimento do cabeçalho: 5
  • TOS: 00
  • Comprimento total: Auto (será calculado automaticamente)
  • Identificação: 1234
  • Flags: 2 (Don´t fragment  = Set; More fragments = Not set)
  • Offset de fragmento: 0
  • TTL: 255
  • Protocolo: 1 (ICMP)
  • Checksum do cabeçalho: Auto (será calculado automaticamente)
  • Endereço IP de origem: 192.168.1.114
  • Endereço IP de destino: 192.168.1.1
  • Opções: Vazio.

Próxima camada (Next layer): ICMP

packETH - Camada de Internet

Dados do pacote ICMP:

  • Tipo: 08 (Echo Request)
  • Código: 00
  • Checksum: Auto (será calculado automaticamente)
  • Identificador: 0001
  • Número de sequência: 0001
  • Dados: 464142494F (a palavra “FÁBIO” em hexadecimal, convertida do ASCII 7065667379)

packETH - Pacote ICMP Echo Request

Após configurar o pacote, basta clicar no botão Send para enviá-lo. Não se esqueça de antes clicar no botão Interface e selecionar a interface de rede que será utilizada no envio do pacote. Veja na figura a seguir o pacote capturado no Wireshark, e note que houve a resposta Echo Reply do meu host de destino. Note também o payload do pacote (“FÁBIO”):

packETH - Capturando ping no Wireshark

 

Exemplo 02: Enviando um pacote TCP

Vamos a um segundo exemplo. Desta vez vou enviar um pacote TCP com o flag SYN ativado, o que irá iniciar o procedimento do handshake de três vias entre os hosts. Espera-se que o host de destino responda com um pacote contendo as flags SYN e ACK ativadas, indicando que a conexão foi aceita, mas não será compeltada pois meu host irá usar uma porta fictícia (não ativa), e deverá responder de volta com um flag RST (reset).

Configurações do equipamento::

  • Host onde o pckETH será executado: Linux Ubuntu, com IP 192.168.1.100/24 e MAC Address 08:00:27:6c:c0:f4
  • Wireshark instalado neste host, para capturar e analisar os pacotes gerados
  • Host de destino: será meu gateway, de IP 192.168.1.1/24 e MAC Address c8:d7:19:ee:2a:17, com serviço de Web (porta 80) ativo (padrão)

Camada de Enlace

  • Ethernet ver. II
  • MAC de destino: c8:d7:19:ee:2a:17
  • MAC de origem: 08:00:27:6c:c0:f4
  • Ethertype: 0x0800 (IPv4)

Próxima camada (Next layer): IPv4

packETH - Camada de Enlace

Camada de Internet

  • Versão: 4
  • Comprimento do cabeçalho: 5
  • TOS: 00
  • Comprimento total: Auto (será calculado automaticamente)
  • Identificação: 7000
  • Flags: 2 (Don´t fragment  = Set; More fragments = Not set)
  • Offset de fragmento: 0
  • TTL: 15
  • Protocolo: 6 (TCP)
  • Checksum do cabeçalho: Auto (será calculado automaticamente)
  • Endereço IP de origem: 192.168.1.100
  • Endereço IP de destino: 192.168.1.1
  • Opções: Vazio.

Próxima camada (Next layer): TCP

Pacote TCP no packeth - Linux Ubuntu

 

Camada de Transporte (Dados TCP)

  • Porta de Origem: 555
  • Porta de Destino: 80
  • Número de Sequência: 100
  • Número de Confirmação (ACK): 100
  • Comprimento do Cabeçalho: 20
  • Flags: SYN
  • Tamanho da Janela: 4000
  • Checksum: Auto (será calculado automaticamente)
  • Ponteiro de Urgente: 0
  • Opções: Vazio
  • TCP payload (dados): 464142494F

Camada de Transporte - Protocolo TCP no packETH - Ubuntu Linux

Após configurar o pacote, basta clicar no botão Send para enviá-lo. Veja na figura a seguir o pacote capturado no Wireshark, e note que houve a resposta do meu gateway com as flags SYN e ACK ativadas, e veja que a máquina de origem respondeu de volta com a flag RST ativada, resetando a conexão:

Captura de pacote TCP com wireshark a partir do packETH

Gateway respondendo com flags SYN e ACK

Captura de pacote TCP com Wireshark e packETH no Ubuntu

Host respondendo ao gateway com flag RST ativada

Você pode criar uma infinidade de tipos de pacotes, combinando as opções de campos disponíveis, e realizar testes variados em sua rede, com testes de conectividade e segurança. Nos próximos artigos vou tratar sobre funcionalidades mais avançadas do packETH, que podem ser configuradas clicando nos botões Gen-b, Gen-s e Pcap.

 

Sobre Fábio dos Reis (1333 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*