traceroute命令

通過traceroute可以知道信息從計算機到互聯網另一端的主機數據經過什麼路徑。當然每次數據包由某一同樣的出發點(source)到達某一同樣的目的地(destination)走的路徑可能會不一樣,但基本上來說大部分時候所走的路由是相同的。linux系統中,我們稱之爲traceroute,在MS Windows中爲tracerttraceroute通過發送小的數據包到目的設備直到其返回,來測量其需要多長時間。一條路徑上的每個設備traceroute要測3次。輸出結果中包括每次測試的時間(ms)和設備的名稱(如有的話)及其IP地址。
在大多數情況下,在linux主機系統可直接執行命令行:

traceroute hostname

而在Windows系統下是執行tracert的命令:

tracert hostname

1.命令格式

traceroute[參數][主機]

2.命令功能

traceroute指令可追蹤網絡數據包的路由途徑,預設數據包大小是40Bytes,用戶可另行設置。
具體參數格式:traceroute [-dFlnrvx][-f<存活數值>][-g<網關>…][-i<網絡界面>][-m<存活數值>][-p<通信端口>][-s<來源地址>][-t<服務類型>][-w<超時秒數>][主機名稱或IP地址][數據包大小]

3.命令參數

  • -d 使用Socket層級的排錯功能。
  • -f 設置第一個檢測數據包的存活數值TTL的大小。
  • -F 設置勿離斷位。
  • -g 設置來源路由網關,最多可設置8個。
  • -i 使用指定的網絡界面送出數據包。
  • -I 使用ICMP迴應取代UDP資料信息。
  • -m 設置檢測數據包的最大存活數值TTL的大小。
  • -n直接使用IP地址而非主機名稱。
  • -p 設置UDP傳輸協議的通信端口。
  • -r 忽略普通的Routing Table,直接將數據包送到遠端主機上。
  • -s 設置本地主機送出數據包的IP地址。
  • -t 設置檢測數據包的TOS數值。
  • -v 詳細顯示指令的執行過程。
  • -w 設置等待遠端主機回報的時間。
  • -x 開啓或關閉數據包的正確性檢驗。

注意:有的系統(如:Centos7)上默認不安裝 traceroute 命令工具,那麼就要使用 root 用戶先安裝好了再使用。使用 yum install traceroute 命令來安裝即可。

4.使用實例

實例1:traceroute 用法簡單、最常用的用法

命令:

traceroute www.yiibai.com

輸出:

[yiibai@localhost ~]$ traceroute www.yiibai.com
traceroute to www.yiibai.com (112.124.103.85), 30 hops max, 60 byte packets
 1  112.66.64.1 (112.66.64.1)  3.789 ms  5.548 ms  2.798 ms
 2  218.77.139.177 (218.77.139.177)  6.378 ms  4.787 ms  4.786 ms
 3  218.77.137.73 (218.77.137.73)  30.638 ms  29.539 ms  31.520 ms
 4  202.97.85.94 (202.97.85.94)  46.474 ms * *
 5  * * *
 6  * 115.236.101.209 (115.236.101.209)  48.751 ms 115.236.101.217 (115.236.101.217)  47.206 ms
 7  42.120.247.73 (42.120.247.73)  47.765 ms 42.120.247.109 (42.120.247.109)  47.337 ms  47.383 ms
 8  106.11.144.18 (106.11.144.18)  46.717 ms 106.11.37.9 (106.11.37.9)  47.143 ms 106.11.144.30 (106.11.144.30)  54.233 ms
 9  * * *
10  112.124.103.85 (112.124.103.85)  45.906 ms  45.463 ms  46.325 ms
[yiibai@localhost ~]$

說明:
記錄按序列號從1開始,每個紀錄就是一跳 ,每跳錶示一個網關,看到每行有三個時間,單位是 ms,其實就是-q的默認參數。探測數據包向每個網關發送三個數據包後,網關響應後返回的時間;如果使用 traceroute -q 4 www.yiibai.com ,表示向每個網關發送4個數據包。
有時我們traceroute 一臺主機時,會看到有一些行是以星號表示的。出現這樣的情況,可能是防火牆封掉了ICMP的返回信息,所以我們得不到什麼相關的數據包返回數據。
有時在某一網關處延時比較長,有可能是某臺網關比較阻塞,也可能是物理設備本身的原因。當然如果某臺DNS出現問題時,不能解析主機名、域名時,也會 有延時長的現象;您可以加-n 參數來避免DNS解析,以IP格式輸出數據。
如果在局域網中的不同網段之間,可以通過traceroute 來排查問題所在,是主機的問題還是網關的問題。如果通過遠程來訪問某臺服務器遇到問題時,我們用到 traceroute 追蹤數據包所經過的網關,提交IDC服務商,也有助於解決問題;但目前看來在國內解決這樣的問題是比較困難的,就是發現問題所在,IDC服務商也不可能幫助我們解決。

實例2:跳數設置

命令:

traceroute -m 10 www.yiibai.com

輸出:

[yiibai@localhost ~]$ traceroute -m 10 www.baidu.com
traceroute to www.baidu.com (14.215.177.37), 10 hops max, 60 byte packets
 1  112.66.64.1 (112.66.64.1)  24.111 ms  24.168 ms  23.892 ms
 2  218.77.141.13 (218.77.141.13)  2.862 ms  2.613 ms  3.113 ms
 3  218.77.150.13 (218.77.150.13)  13.543 ms 218.77.150.169 (218.77.150.169)  15.057 ms 218.77.139.37 (218.77.139.37)  11.389 ms
 4  113.108.208.26 (113.108.208.26)  14.364 ms  14.109 ms  13.855 ms
 5  * * *
 6  14.29.121.194 (14.29.121.194)  13.087 ms 14.29.117.246 (14.29.117.246)  13.361 ms  13.780 ms
 7  * * *
 8  * * *
 9  * * *
10  * * *
[yiibai@localhost ~]$

實例3:顯示IP地址,不查主機名

命令:

traceroute -n www.yiibai.com

輸出:

[yiibai@localhost ~]$ traceroute -n www.yiibai.com
traceroute to www.yiibai.com (112.124.103.85), 30 hops max, 60 byte packets
 1  112.66.64.1  5.303 ms  5.710 ms  4.159 ms
 2  218.77.139.177  12.319 ms  4.822 ms  4.063 ms
 3  218.77.137.73  28.319 ms  31.587 ms  30.583 ms
 4  202.97.85.94  46.240 ms *  46.832 ms
 5  * 220.191.200.22  48.562 ms 220.191.200.14  47.844 ms
 6  115.236.101.213  48.804 ms 115.236.101.217  47.830 ms  47.916 ms
 7  42.120.247.105  49.330 ms 42.120.247.73  47.251 ms 42.120.247.57  49.740 ms
 8  106.11.144.26  46.769 ms 106.11.37.9  47.537 ms 106.11.144.30  46.512 ms
 9  * * *
10  112.124.103.85  46.267 ms  46.497 ms  45.589 ms
[yiibai@localhost ~]$
[yiibai@localhost ~]$ traceroute  www.yiibai.com
traceroute to www.yiibai.com (112.124.103.85), 30 hops max, 60 byte packets
 1  112.66.64.1 (112.66.64.1)  136.730 ms  137.479 ms  137.031 ms
 2  218.77.139.177 (218.77.139.177)  5.759 ms  5.458 ms  5.009 ms
 3  218.77.137.73 (218.77.137.73)  33.451 ms  33.259 ms  32.826 ms
 4  202.97.85.94 (202.97.85.94)  46.738 ms  46.541 ms *
 5  220.191.200.22 (220.191.200.22)  47.521 ms  49.346 ms  48.927 ms
 6  115.236.101.217 (115.236.101.217)  48.678 ms  48.109 ms 115.236.101.213 (115.236.101.213)  50.423 ms
 7  42.120.247.73 (42.120.247.73)  47.478 ms 42.120.247.89 (42.120.247.89)  51.216 ms 42.120.247.73 (42.120.247.73)  49.460 ms
 8  106.11.37.9 (106.11.37.9)  48.543 ms 106.11.144.18 (106.11.144.18)  46.301 ms 106.11.37.9 (106.11.37.9)  47.242 ms
 9  * * *
10  112.124.103.85 (112.124.103.85)  45.647 ms  46.231 ms  45.803 ms
[yiibai@localhost ~]$

實例4:探測包使用的基本UDP端口設置1688

命令:

traceroute -p 1688 www.baidu.com

輸出:

[yiibai@localhost ~]$ traceroute -p 1688 www.baidu.com
traceroute to www.baidu.com (14.215.177.38), 30 hops max, 60 byte packets
 1  112.66.64.1 (112.66.64.1)  5.181 ms  6.403 ms  6.980 ms
 2  218.77.152.5 (218.77.152.5)  2.537 ms  4.478 ms  4.229 ms
 3  218.77.150.13 (218.77.150.13)  14.014 ms 218.77.150.177 (218.77.150.177)  14.449 ms 218.77.139.37 (218.77.139.37)  12.531 ms
 4  113.96.0.117 (113.96.0.117)  19.652 ms  19.407 ms  18.873 ms
 5  * * *
 6  14.29.121.194 (14.29.121.194)  13.897 ms 14.29.117.242 (14.29.117.242)  13.578 ms 14.29.121.198 (14.29.121.198)  12.940 ms
 7  * * *

實例5:把探測包的個數設置爲值5

命令:

traceroute -q 5 www.yiibai.com

輸出:

[yiibai@localhost ~]$ traceroute -q 5 www.yiibai.com
traceroute to www.yiibai.com (112.124.103.85), 30 hops max, 60 byte packets
 1  112.66.64.1 (112.66.64.1)  3.569 ms  3.822 ms  4.244 ms  3.931 ms  4.283 ms
 2  218.77.139.177 (218.77.139.177)  4.032 ms  3.743 ms  3.255 ms  2.997 ms  3.193 ms
 3  218.77.137.73 (218.77.137.73)  32.480 ms  31.949 ms  31.635 ms  30.837 ms  30.040 ms
 4  202.97.85.94 (202.97.85.94)  47.288 ms * *  46.340 ms *
 5  * * * * *
 6  * 115.236.101.209 (115.236.101.209)  47.419 ms * * *
 7  42.120.247.105 (42.120.247.105)  49.506 ms 42.120.247.73 (42.120.247.73)  46.319 ms  47.250 ms 42.120.247.105 (42.120.247.105)  47.711 ms 42.120.247.89 (42.120.247.89)  48.121 ms
 8  106.11.144.22 (106.11.144.22)  45.250 ms  45.780 ms 106.11.144.30 (106.11.144.30)  46.084 ms  46.115 ms 140.205.19.61 (140.205.19.61)  47.716 ms
 9  * * * * *
10  112.124.103.85 (112.124.103.85)  45.264 ms  45.793 ms  46.360 ms  45.483 ms  45.505 ms
[yiibai@localhost ~]$

實例6:繞過正常的路由表,直接發送到網絡相連的主機

命令:

traceroute -r www.baidu.com

輸出:

[yiibai@localhost ~]$ traceroute -r www.baidu.com
traceroute to www.baidu.com (14.215.177.37), 30 hops max, 60 byte packets
connect: Network is unreachable
[yiibai@localhost ~]$ ping www.baidu.com
PING www.baidu.com (14.215.177.37) 56(84) bytes of data.
64 bytes from 14.215.177.37 (14.215.177.37): icmp_seq=1 ttl=57 time=12.3 ms
64 bytes from 14.215.177.37 (14.215.177.37): icmp_seq=2 ttl=57 time=12.0 ms
^C
--- www.baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 12.071/12.206/12.342/0.174 ms
[yiibai@localhost ~]$ traceroute -r www.yiibai.com
traceroute to www.yiibai.com (112.124.103.85), 30 hops max, 60 byte packets
connect: Network is unreachable
[yiibai@localhost ~]$

實例7:把對外發探測包的等待響應時間設置爲3秒

命令:

traceroute -w 3 www.baidu.com

輸出:

[yiibai@localhost ~]$ traceroute -w 3 www.baidu.com
traceroute to www.baidu.com (14.215.177.38), 30 hops max, 60 byte packets
 1  112.66.64.1 (112.66.64.1)  6.215 ms  5.765 ms  5.534 ms
 2  218.77.152.5 (218.77.152.5)  2.448 ms  4.708 ms  4.322 ms
 3  218.77.139.37 (218.77.139.37)  13.081 ms 218.77.150.177 (218.77.150.177)  12.037 ms 218.77.139.37 (218.77.139.37)  12.508 ms
 4  113.96.0.117 (113.96.0.117)  22.515 ms  22.018 ms  21.789 ms
 5  * * *
 6  14.29.121.198 (14.29.121.198)  12.725 ms 14.29.117.242 (14.29.117.242)  15.920 ms 14.29.121.206 (14.29.121.206)  12.866 ms
 7  * * *

Traceroute的工作原理:
Traceroute最簡單的基本用法是:traceroute hostname
Traceroute程序的設計是利用ICMP及IP header的TTL(Time To Live)欄位(field)。首先,traceroute送出一個TTL是1的IP datagram(其實,每次送出的爲3個40字節的包,包括源地址,目的地址和包發出的時間標籤)到目的地,當路徑上的第一個路由器(router)收到這個datagram時,它將TTL減1。此時,TTL變爲0了,所以該路由器會將此datagram丟掉,並送回一個「ICMP time exceeded」消息(包括髮IP包的源地址,IP包的所有內容及路由器的IP地址),traceroute 收到這個消息後,便知道這個路由器存在於這個路徑上,接着traceroute 再送出另一個TTL是 2 的datagram,發現第 2 個路由器…… traceroute 每次將送出的datagram的TTL 加1來發現另一個路由器,這個重複的動作一直持續到某個datagram 抵達目的地。當datagram到達目的地後,該主機並不會送回ICMP time exceeded消息,因爲它已是目的地了,那麼traceroute如何得知目的地到達了呢?
Traceroute在送出UDP datagrams到目的地時,它所選擇送達的port number 是一個一般應用程序都不會用的號碼(30000 以上),所以當此UDP datagram 到達目的地後該主機會送回一個「ICMP port unreachable」的消息,而當traceroute 收到這個消息時,便知道目的地已經到達了。所以traceroute 在Server端也是沒有所謂的Daemon 程式。
Traceroute提取發 ICMP TTL到期消息設備的IP地址並作域名解析。每次 ,Traceroute都打印出一系列數據,包括所經過的路由設備的域名及 IP地址,三個包每次來回所花時間。

Windows系統上的tracert命令用法

格式:

tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name

參數說明:
tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
該診斷實用程序通過向目的地發送具有不同生存時間 (TL) 的 Internet 控制信息協議 (CMP) 迴應報文,以確定至目的地的路由。路徑上的每個路由器都要在轉發該 ICMP 迴應報文之前將其 TTL 值至少減 1,因此 TTL 是有效的跳轉計數。當報文的 TTL 值減少到 0 時,路由器向源系統發回 ICMP 超時信息。通過發送 TTL 爲 1 的第一個迴應報文並且在隨後的發送中每次將 TTL 值加 1,直到目標響應或達到最大 TTL 值,Tracert 可以確定路由。通過檢查中間路由器發發回的 ICMP 超時 (ime Exceeded) 信息,可以確定路由器。注意,有些路由器「安靜」地丟棄生存時間 (TLS) 過期的報文並且對 tracert 無效。

參數:

  • -d 指定不對計算機名解析地址。
  • -h maximum_hops 指定查找目標的跳轉的最大數目。
  • -jcomputer-list 指定在 computer-list 中鬆散源路由。
  • -w timeout 等待由 timeout 對每個應答指定的毫秒數。
  • target_name 目標計算機的名稱。
    實例:
Microsoft Windows [版本 10.0.10586]
(c) 2015 Microsoft Corporation。保留所有權利。

C:\Users\Administrator>tracert www.yiibai.com

通過最多 30 個躍點跟蹤
到 www.yiibai.com [112.124.103.85] 的路由:

  1     2 ms     2 ms     3 ms  112.66.64.1
  2     2 ms     3 ms     3 ms  218.77.139.177
  3    27 ms    30 ms    27 ms  218.77.137.73
  4     *        *       45 ms  202.97.85.94
  5    46 ms     *       45 ms  220.191.200.14
  6    46 ms    46 ms    46 ms  115.236.101.213
  7    47 ms    46 ms    46 ms  42.120.247.73
  8    46 ms    45 ms    46 ms  106.11.37.13
  9     *        *        *     請求超時。
 10    45 ms    45 ms    45 ms  112.124.103.85

跟蹤完成。

C:\Users\Administrator>