Implementando um Ping Usando ICMP

Compartilhar/Favoritos

Esse exemplo mostra como implementar um aplicativo do tipo Ping usando o protocolo ICMP, da mesma forma que o Ping.exe do Windows.

Este é de um grupo de posts muito antigos, de 2002. Vêm do meu antigo site, quando ainda trabalhava com Delphi e tinha um K6-2(!!!!). Bons tempos aqueles…

Provavelmente não serve para muita coisa hoje, mas é legal ver como as coisas eram. Além disso, ainda há gente acessando!

Esse exemplo mostra como criar um aplicativo do tipo Ping usando a DLL ICMP.DLL que acompanha o Windows.

Ao contrário de alguns exemplos que vi na Internet, esse exemplo não tenta se conectar a uma porta TCP para identificar se um host está ativo ou para tentar identificar se a sua máquina está na Internet. Ele usa o protocolo ICMP, da mesma forma que os Pings tradicionais, como o do Windows.

Abaixo tento explicar um pouco sobre o protocolo e a DLL do Windows que uso.

Se quiser pular direto para o download dos exemplos, clique aqui.

O protocolo ICMP

O ICMP é um protocolo muito simples implementado na maior parte dos equipamentos que usam IP e serve para receber e enviar informações diversas sobre a rede.

Quando você recebe a mensagem “host unreachable” ao tentar se conectar a um host (através de HTTP, FTP ou qualquer serviço), seu computador recebeu uma mensagem via ICMP de alguma máquina no meio do caminho indicando que um destino que você estava tentando se conectar não existe.

Esse protocolo é implementado em quase todos os equipamentos que usam IP (computadores, roteadores, etc).

Um dos serviços implementados via ICMP é o chamado “Echo”. Quando um equipamento recebe um pacote ICMP “pedindo” o serviço Echo, ele deve enviar uma resposta ao IP que originou a mensagem.

Assim, a forma tradicional de fazer um Ping é enviar um pacote ICMP do tipo Echo a um destinatário, ficar esperando a resposta chegar e calcular o tempo que levou entre a requisição e a resposta.

Para saber mais sobre o ICMP, veja o RFC 792.

A API ICMP

A DLL ICMP.DLL que acompanha o Windows já faz tudo que precisamos para o nosso Ping: monta o pacote ICMP, envia, espera a resposta e calcula o tempo entre a requisição e resposta. Ela é usada pelo aplicativo Ping.exe que vem com o Windows.

Inicialmente essa DLL não era documentada (e até hoje não é adequadamente) e a Microsoft diz que não irá dar suporte a ela no futuro, já que não faz parte do Win32 SDK. No entanto, ela diz isso desde o Windows 95…

O problema é que, embora seu uso seja simples, é necessário que a API WinSock seja inicializada, a ICMP.DLL seja carregada, etc… Por isso decidi criar uma classe que facilitasse tudo isso (e ainda incluísse umas funcionalidades a mais).

Download

Pegue aqui (3,85KB) o código fonte para Delphi 7 da classe TPing e do aplicativo Ping.

You may also like...

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Translate »