我需要跟踪ip的路由,实际上我正在使用TIdTraceRoute
单元中的idTraceRoute
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。
答案 0 :(得分:2)
我刚刚在我的博客上写了一个条目,可以帮助你。
Building a traceroute application with IP geolocation using delphi
答案 1 :(得分:1)
跟踪基本上是基于发送以TTL为1开始的ICMP数据包并将其增加直到到达目的地。因为每个路由器减少了TTL,当它达到0时,错误被返回给调用者,它可以用于跟踪“路由”数据包。请注意,防火墙不能阻止ICMP协议的工作。 ICMP是一种在IP上运行的协议,就像TCP一样。 不使用TCP。您可以使用ICMP编写traceroute实用程序。但Windows tracert实用程序是否适用于您的系统?
答案 2 :(得分:0)
您使用的是哪个版本的Indy?目前的版本是10.5.8。