2012-04-25 118 views
13

根據Stevens(TCP/IP Illustrated)的說法,traceroute程序使用增量TTL(1,2,3等)向目標主機發送UDP數據包,以獲得來自ICMP TTL EXPIRED的中間跳信息消息。
的「目的地達到」條件是ICMP端口不可達消息,因爲路由跟蹤解決與大量的隨機端口(即:不可能有人在那裏聽)
所以我的問題是:是否有一個技術原因(缺點,RFC中,等)的使用的UDP數據包,而不是使用,例如,ICMP迴應請求消息(隨TTL),並使用回波答覆答案作爲結束條件?
據我所知,ICMP回顯應答可能通過中間防火牆或其他網絡設備被過濾掉,但我想這也可以發生在UDP包;)爲什麼跟蹤路由發送UDP數據包,而不是ICMP的呢?

非常感謝
塞爾吉奧

回答

13

它實際上做traceroute的「老」方法。我想主要動機是,發出平原UDP數據包不需要特殊的權限,如發送ICMP報文做(原始套接字或同等學歷)。這就是爲什麼例如ping通常爲setuid根,這是一個很大的風險安全明智的。

如今traceroute也支持ICMP和TCP探測數據包,所以你更有可能潛入防火牆,這比沒有考慮的部署更可能。這也意味着,traceroute很可能也是您的系統上使用setuid root。看到它的手冊頁,特別是部分約可用的方法:http://linux.die.net/man/8/traceroute