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:
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.
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):
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:
- 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
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
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)
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”):
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
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
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
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:
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.
Escreva um comentário