2013-01-04 47 views
2

我试图在c中实现ios的traceroute。 (例如:为了找到哪个路由器不工作)。不幸的是,我不能使用每次路由器杀死我的数据包时向我发送响应的ICMP协议。它是用TCP或其他协议实现它的任何方式吗? 我需要一些关于如何完成的思考方向。iOS上的ICMP vs TCP协议

+1

检查http://michael.toren.net/code/tcptraceroute/。 – netcoder

+0

请参阅http://www.inetdaemon.com/tutorials/troubleshooting/tools/traceroute/definition.shtml – banuj

+0

作为参考代码,我使用http://www.opensource.apple.com/source/network_cmds/network_cmds-307/traceroute .tproj/traceroute.c仅在使用ICMP协议时才能提供良好的结果。 –

回答

1

基本上,可以使用全部三种,ICMP,UDP和TCP。 的BSD实现使用UDP据我所知,在这个源文件:

http://www.opensource.apple.com/source/network_cmds/network_cmds-307/traceroute.tproj/traceroute.c

正如你所看到的,这是不是太琐碎。

编辑:

FreeBSD的路由跟踪来源:

http://svnweb.freebsd.org/base/release/9.1.0/contrib/traceroute/

+0

我目前正在使用该源代码,但正如您在代码中看到的那样,它会给我一个“好结果”(实际上只在使用ICMP protocole时才显示我的跟踪)。随着所有协议的其余部分,我将得到什么或***这是没有用 –

+0

我确实有root权限。它可以配置在Xcode –

+0

你的意思是原始套接字或其他人的根?我对苹果系统没有太多具体的了解。我会选择FreeBSD的traceroute实用程序的源代码,如果上述内容没有完全实现,这可能是可行的。我刚刚使用'traceroute -PUDP google.com'在我的FreebSD 8.2机器上尝试过,它显示出正确的结果,就像ICMP一样。请注意,某些路由器可能在某些3/4层协议上不能正确响应。 – Sam