2010-11-14 2 views
2

Мне нужно проследить маршрут ip, на самом деле я использую компонентный компонент TIdTraceRoute из блока idTraceRoute.Как я могу трассировать IP-адрес, используя delphi

IdTraceRoute1:= TIdTraceRoute.Create(Self); 
    IdTraceRoute1.ResolveHostNames:= True; 
    IdTraceRoute1.ReceiveTimeout:= 5000; 
    IdTraceRoute1.OnReply:= TraceRoute; 

    IdTraceRoute1.Host:= 'www.google.com'; 
    IdTraceRoute1.Trace; 


procedure TForm1.TraceRoute(ASender: TComponent; 
    const AReplyStatus: TReplyStatus); 
begin 
    Memo1.Lines.Add(AReplyStatus.FromIpAddress); 
end; 

но всегда возврат.

0.0.0.0 
0.0.0.0 
0.0.0.0 
0.0.0.0 
0.0.0.0 
0.0.0.0 

есть другой способ отслеживания ip, возможно, используя windows api или используя другой компонент indy?

на самом деле я использую Delphi-Xe и Windows 7

+0

добавить тег 'indy', проблема есть –

+0

да, есть API, чтобы избежать Indy, проконсультируйтесь здесь: http://msdn.microsoft.com/en-us/library/aa366051(VS.85).aspx –

ответ

1

Трассировка в основном базируется на посылке ICMP-пакетов, начиная с TTL 1 и увеличивая ее до достижения пункта назначения. Поскольку каждый маршрутизатор уменьшает TTL, и когда он достигает 0, ошибка возвращается вызывающему, ее можно использовать для отслеживания пакетов маршрутов. Обратите внимание, что для работы протокол ICMP не должен останавливаться брандмауэром. ICMP - это протокол, который выполняется поверх IP, например TCP. Это не использование TCP. Вы можете закодировать утилиту traceroute только с помощью ICMP. Но работает ли утилита tracert Windows в вашей системе?

0

Какую версию Indy вы используете? Текущая версия 10.5.8.