瞭解traceroute基本概念安全
瞭解traceroute工做原理及詳細過程網絡
熟悉traceroute經常使用命令dom
traceroute (Windows系統下是tracert) 命令利用ICMP 協議定位您的計算機和目標計算機之間的全部路由器。TTL值能夠反映數據包通過的路由器或網關的數量,經過操縱獨立ICMP呼叫報文的TTL值和觀察該報文被拋棄的返回信息,traceroute命令可以遍歷到數據包傳輸路徑上的全部路由器。traceroute是一條緩慢的命令,由於每通過一臺路由器都要花去大約10到15秒。工具
traceroute是用來偵測主機到目的主機之間所經路由狀況的重要工具,也是最便利的工具。儘管ping工具也能夠進行偵測,可是,由於ip頭的限制,ping不能徹底的記錄下所通過的路由器,因此traceroute正好就填補了這個缺憾。traceroute的原理是很是很是的有意思,它收到目的主機的IP後,首先給目的主機發送一個TTL=1的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的用法爲: Traceroute [options] <IP-address or domain-name> [data size]測試
[options]的內容有:spa
[data size]:每次測試包的數據字節長度(缺省爲38)設計
並非全部網關都會如實返回ICMP超時報文。出於安全性考慮,大多數防火牆以及啓用了防火牆功能的路由器缺省配置爲不返回各類ICMP報文,其他路由器或交換機也可能被管理員主動修改配置變爲不返回 ICMP報文。所以traceroute程序不必定能拿到全部的沿途網關地址。因此,當某個TTL值的數據包得不到響應時,並不能中止這一追蹤過程,程序仍然會把TTL遞增而發出下一個數據包。這個過程將一直持續到數據包發送到目標主機,或者達到默認或用參數指定的追蹤限制(maximum_hops)才結束追蹤。依據上述原理,利用了UDP數據包的traceroute程序在數據包到達真正的目的主機時,就可能由於該主機沒有提供UDP服務而簡單將數據包拋棄,並不返回任何信息。爲了解決這個問題,traceroute故意使用了一個大於30000的端口號,因UDP協議規定端口號必須小於30000,因此目標主機收到數據包後惟一能作的事就是返回一個「端口不可達」的ICMP報文,因而主叫方就將端口不可達報文看成跟蹤結束的標誌。router
使用UDP的traceroute,失敗仍是比較常見的。這經常是因爲,在運營商的路由器上,UDP與ICMP的待遇大不相同。爲了利於troubleshooting,ICMP ECHO Request/Reply 是不會封的,而UDP則不一樣。UDP常被用來作網絡攻擊,由於UDP無需鏈接,於是沒有任何狀態約束它,比較方便攻擊者僞造源IP、僞造目的端口發送任意多的UDP包,長度自定義。因此運營商爲安全考慮,對於UDP端口經常採用白名單ACL,就是隻有ACL容許的端口才能夠經過,沒有明確容許的則通通丟棄。好比容許DNS/DHCP/SNMP等。blog