Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.
Traçando Rotas
Crie um traceroute com componentes Indy
Neste artigo vamos desenvolver uma aplicação que faz graficamente o que faz o utilitário tracert disponível no Windows e no Linux/Unix (nestes, chamado traceroute). O exemplo é semelhante ao utilitário ping criado na edição anterior, mas com muito mais funcionalidades.
Ping e Tracert
Equanto o ping simplesmente envia pacotes para um destino e mede o tempo de ida e volta, o traceroute analisa todo o caminho por onde trafegam os pacotes, colhendo informações sobre os servidores ou roteadores intermediários (chamados de hops, saltos em inglês), além de medir o tempo de ida e volta para cada hop. A Figura 1 ilustra uma simulação do traceroute.
Figura 1. Exemplo com traceroute
Muitas vezes falamos que um site está lento, mas nem sempre é o próprio site: o atraso pode ser causado por um dos servidores intermediários envolvidos no trajeto até o servidor. Com o traceroute podemos descobrir falhas e identificar razões para a lentidão nos servidores envolvidos no processo de envio e recebimento de pacotes.
Criação da interface
Nosso utilitário é uma adaptação de um programa de demonstração que vem no pacote de componentes Indy. Vamos iniciar o desenvolvimento.
Crie uma nova aplicação CLX (File|New>CLX Application). Grave a unit com o nome “un_tracert.pas” e o projeto como “tracert.dpr”.
Insira um TPanel com Align=alTop e Name=pnTopo. Com o foco no pnTopo, insira outro TPanel, com Align=alTop e Name=pnDados. Ainda neste painel, insira um TListBox com Align=alClient e Name=lbLog.
Agora com o foco em pnDados, insira os objetos que seguem, alterando suas respectivas propriedades:
TLabel: Caption=Host Destino;
TLabel: Caption=Máximo de Hops
TEdit: Name=edTarget; Text=(deixar em branco)
TSpindEdit: Name=seMaxHops
TButton: Caption=Executa; Name=btExecuta
TButton: Caption=Cancela; Name=btCancela
Com o foco no formulário, insira mais um TPanel com Align=alClient e Name=pnInfo; com o foco em pnInfo insira um TListView (paleta Common Controls), fazendo Align=alClient, Name=LvTrace, ViewStyle=vsReport. Para Columns, insira três colunas (como na Figura 2).
Insira um idICMPClient (paleta Indy Clients) com Name=idICMPClient e idAntiFreeze (paleta Indy Misc) com Name=idAntiFreeze.
A Figura 3 ilustra o formulário finalizado.