如何使用Delphi追踪IP

3

我需要追踪IP的路径,现在我正在使用来自idTraceRoute单元的TIdTraceRoute indy组件。

   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。


添加标签 indy,问题就在这里。 - undefined
是的,有一个API可以避免使用Indy,请参考这里:http://msdn.microsoft.com/en-us/library/aa366051(VS.85).aspx - undefined
2个回答

2

1

Trace基本上是基于发送ICMP数据包,从TTL为1开始逐渐增加直到到达目的地。因为每个路由器都会减少TTL,当它达到0时,会向调用者返回一个错误,因此可以用来跟踪数据包所经过的“路径”。请注意,为了使其正常工作,ICMP协议不能被防火墙停止。ICMP是在IP之上运行的协议,就像TCP一样。它不使用TCP。您可以编写一个仅使用ICMP的traceroute实用程序。但是Windows的tracert实用程序能在您的系统上工作吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接