traceroute命令初探

1、學習目標

  • 瞭解traceroute基本概念安全

  • 瞭解traceroute工做原理及詳細過程網絡

  • 熟悉traceroute經常使用命令dom

  • 一些注意點

2、traceroute基本概念

  traceroute (Windows系統下是tracert) 命令利用ICMP 協議定位您的計算機和目標計算機之間的全部路由器。TTL值能夠反映數據包通過的路由器或網關的數量,經過操縱獨立ICMP呼叫報文的TTL值和觀察該報文被拋棄的返回信息,traceroute命令可以遍歷到數據包傳輸路徑上的全部路由器。traceroute是一條緩慢的命令,由於每通過一臺路由器都要花去大約1015秒。工具

3、traceroute工做原理及詳細過程

  traceroute是用來偵測主機到目的主機之間所經路由狀況的重要工具,也是最便利的工具。儘管ping工具也能夠進行偵測,可是,由於ip頭的限制,ping不能徹底的記錄下所通過的路由器,因此traceroute正好就填補了這個缺憾。traceroute的原理是很是很是的有意思,它收到目的主機的IP後,首先給目的主機發送一個TTL=1UDP數據包,而通過的第一個路由器收到這個數據包之後,就自動把TTL1,而TTL變爲0之後,路由器就把這個包給拋棄了,並同時產生 一個主機不可達的ICMP數據報給主機。主機收到這個數據報之後再發一個TTL=2UDP數據報給目的主機,而後刺激第二個路由器給主機發ICMP數據報。如此往復直到到達目的主機。這樣,traceroute就拿到了全部的路由器ip。從而避開了ip頭只能記錄有限路由IP的問題。有人要問,我怎麼知道UDP到沒到達目的主機呢?這就涉及一個技巧的問題,TCPUDP協議有一個端口號定義,而普通的網絡程序只監控少數的幾個號碼較小的端口,好比說80,好比說23,等等。而traceroute發送的是端口號大於30000(真變態)的UDP報,因此到達目的主機的時候,目的主機只能發送一個端口不可達的ICMP數據報給主機。主機接到這個報告之後就知道,主機到了,因此,說traceroute是一個騙子一點也不爲過:)。其詳細過程以下:學習

  1. 將傳遞到目的IP地址的ICMP Echo消息的TTL值被設置爲1,該消息報通過第一個路由器時,其TTL值減去1,此時新產生的TTL值爲0
  2. 因爲TTL值被設置爲0,路由器判斷此時不該該嘗試繼續轉發數據報,而是直接拋棄該數據報。因爲數據報的生存週期(TTL值)已經到期,這個路由器會發送一個一個ICMP時間超時,即TTL值過時信息返回到客戶端計算機。
  3. 此時,發出traceroute命令的客戶端計算機將顯示該路由器的名稱,以後能夠再發送一個ICMP Echo消息並把TTL值設置爲2
  4. 1個路由器仍然對這個TTL值減1,而後,若是可能的話,將這個數據報轉發到傳輸路徑上的下一跳。當數據報抵達第2個路由器,TTL值會再被減去1,成爲0值。
  5. 2個路由器會像第1個路由器同樣,拋棄這個數據包,並像第1個路由器那樣返回一個ICMP消息。
  6. 該過程會一直持續,traceroute命令不停遞增TTL值,而傳輸路徑上的路由器不斷遞減該值,直到數據報最終抵達預期的目的地。
  7. 當目的計算機接收到ICMP Echo消息時,會回傳一個ICMP Echo Reply消息。

4、traceroute經常使用命令

   traceroute的用法爲: Traceroute [options] <IP-address or domain-name> [data size]測試

  [options]的內容有:spa

  • [-n]:顯示的地址是用數字表示而不是符號
  • [-v]:長輸出
  • [-p]:UDP端口設置(缺省爲33434)
  • [-q]:設置TTL測試數目(缺省爲3)
  • [-t]:設置測包的服務類型

  [data size]:每次測試包的數據字節長度(缺省爲38)設計

 

5、一些注意點

  • 並非全部網關都會如實返回ICMP超時報文。出於安全性考慮,大多數防火牆以及啓用了防火牆功能的路由器缺省配置爲不返回各類ICMP報文,其他路由器或交換機也可能被管理員主動修改配置變爲不返回 ICMP報文。所以traceroute程序不必定能拿到全部的沿途網關地址。因此,當某個TTL值的數據包得不到響應時,並不能中止這一追蹤過程,程序仍然會把TTL遞增而發出下一個數據包。這個過程將一直持續到數據包發送到目標主機,或者達到默認或用參數指定的追蹤限制(maximum_hops)才結束追蹤。依據上述原理,利用了UDP數據包的traceroute程序在數據包到達真正的目的主機時,就可能由於該主機沒有提供UDP服務而簡單將數據包拋棄,並不返回任何信息。爲了解決這個問題,traceroute故意使用了一個大於30000的端口號,因UDP協議規定端口號必須小於30000,因此目標主機收到數據包後惟一能作的事就是返回一個「端口不可達」的ICMP報文,因而主叫方就將端口不可達報文看成跟蹤結束的標誌。router

  • 使用UDPtraceroute,失敗仍是比較常見的。這經常是因爲,在運營商的路由器上,UDPICMP的待遇大不相同。爲了利於troubleshootingICMP ECHO Request/Reply 是不會封的,而UDP則不一樣。UDP常被用來作網絡攻擊,由於UDP無需鏈接,於是沒有任何狀態約束它,比較方便攻擊者僞造源IP、僞造目的端口發送任意多的UDP包,長度自定義。因此運營商爲安全考慮,對於UDP端口經常採用白名單ACL,就是隻有ACL容許的端口才能夠經過,沒有明確容許的則通通丟棄。好比容許DNS/DHCP/SNMP等。blog

  • 總結一下,traceroute主要利用IP數據包的TTL字段值 + ICMP來實現,它發送的用於探測網絡路徑的數據包的IP之上的協議能夠是 UDP、TCPICMP不一樣模式下,探測過程當中設計的數據包以下:
  1. UDP模式:UDP探測數據包(目標端口大於30000) + 中間網關發回 ICMP TTL 超時數據包 + 目標主機發回 ICMP Destination Unreachable 數據包
  2. TCP模式:TCP [SYN]探測數據包(目標端口爲Web服務的80) + 中間網關發回 ICMP TTL 超時數據包 + 目標主機發回TCP [SYN ACK] 數據包
  3. ICMP模式:ICMP Echo (ping) Request 探測數據包 + 中間網關發回ICMP TTL超時數據包 + 目標主機發回ICMP Echo (ping) reply 數據包
  • traceroute出現*的分析:源發出ICMP Request,第一個requestTTL1,第二個requestTTL2,之後依此遞增直至第30個;中間的router送回ICMP TTL-expired ( ICMP type 11) 通知source,(packet同時因TTL超時而被drop),由此source知曉一路上通過的每個router;最後的destination送回ICMP Echo Reply(最後一跳不會再回ICMP TTL-expired)。因此中間任何一個router上若是封了ICMP Echo Request, traceroute就不能工做;若是封了type 11(TTL-expired), 中間的router全看不到,但能看到packet到達了最後的destination;若是封了ICMP Echo Reply,中間的全能看到,最後的destination看不到。
相關文章
相關標籤/搜索