2013-01-04 69 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