traceroute程序

Traceroute

Traceroute是用來偵測主機到目的主機之間所經路由情況的重要工具,也是最便利的工具。前面說到,儘管ping工具也可以進行偵測,但是,因爲ip頭的限制,ping不能完全的記錄下所經過的路由器。所以Traceroute正好就填補了這個缺憾。

Traceroute的原理是非常非常的有意思,它受到目的主機的IP後,首先給目的主機發送一個TTL=1(還記得TTL是什麼嗎?)的UDP(後面就 知道UDP是什麼了)數據包,而經過的第一個路由器收到這個數據包以後,就自動把TTL減1,而TTL變爲0以後,路由器就把這個包給拋棄了,並同時產生 一個主機不可達的ICMP數據報給主機。主機收到這個數據報以後再發一個TTL=2的UDP數據報給目的主機,然後刺激第二個路由器給主機發ICMP數據 報。如此往復直到到達目的主機。這樣,traceroute就拿到了所有的路由器ip。從而避開了ip頭只能記錄有限路由IP的問題。

有人要問,我怎麼知道UDP到沒到達目的主機呢?這就涉及一個技巧的問題,TCP和UDP協議有一個端口號定義,而普通的網絡程序只監控少數的幾個號碼較 小的端口,比如說80,比如說23,等等。而traceroute發送的是端口號>30000(真變態)的UDP報,所以到達目的主機的時候,目的 主機只能發送一個端口不可達的ICMP數據報給主機。主機接到這個報告以後就知道,主機到了,所以,說Traceroute是一個騙子一點也不爲過:)

Traceroute程序裏面提供了一些很有用的選項,甚至包含了IP選路的選項,請察看man文檔來了解這些,這裏就不贅述了。

 

Traceroute實現有兩種方法:
一種:發生一個ICMP迴應請求報文;目的主機將會產生一個ICMP迴應答覆報文。Microsoft實現(tracert)中採用該方法。
       當迴應請求到達目的主機時,ICMP就產生一個答覆報文,它的
      源地址等於收到的請求報文中的目的IP地址。
另一種:發生一個數據報給一個不存在的應用進程;目的主機將會產生一個ICMP目的不可達報文。大多數UNIX版本的traceroute程序採用該方法。
            Traceroute程序發送一份UDP數據報給目的主機,但它選擇一個不可能的值作爲UDP端口號(大於30000),使目的主機的任何一個應用程序都不可能使用該端口。因爲,當該數據報到達時,將使目的主機的UDP模塊產生一份“端口不可達”錯誤的ICMP報文。這樣,Traceroute程序所要做的就是區分接收到的ICMP報文是超時還是端口不可達,以判斷什麼時候結束。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章