體驗traceroute

Linux環境
traceroute是linux的一個軟件,可以測你電腦到目標電腦途中經過的路由,就是你到目標的網絡路徑。

Windows環境
windows下類似的是tracert,相關程序在下面的文件夾

C:\Windows\System32

通常直接可以cmd下直接輸入tracert使用。(除非你修改過Path環境變量。這樣的話,只要在Path加上上面的路徑就可以了。)


開始測試

先在linux下測試,traceroute需要root權限。

#traceroute -n www.baidu.com

(拿www.baidu.com來當小白鼠,嘻嘻。)

選項:
-n,返回來的IP地址不解析。

利用-n選項的好處是,省去等待IP地址解析域名的時間。

測試1

# traceroute -n www.baidu.com
traceroute to www.baidu.com (183.232.231.172), 30 hops max, 60 byte packets
 1  192.168.1.1  0.989 ms  1.089 ms  1.933 ms
 2  10.30.8.1  2.307 ms  2.652 ms  2.633 ms
 3  172.16.254.1  5.191 ms  5.089 ms  4.961 ms
 4  10.0.3.9  4.635 ms  4.637 ms  4.570 ms
 5  * 10.0.4.6  4.867 ms *
 6  * * 120.236.177.1  7.522 ms
 7  120.196.2.9  7.944 ms * *
 8  * * *
 9  * * *
10  * 120.241.49.30  103.882 ms *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *
#

結果還沒有到www.baidu.com就失敗了。
(可惡啊,爲啥不可以的呢)

難道網絡問題?不對啊,我能聯網而且有外部IP地址返回,證明對外網絡沒問題。
難道我電腦到不了www.baidu.com的服務器?那麼ping一下吧!

ping www.baidu.com

# ping www.baidu.com
PING www.baidu.com (183.232.231.172) 56(84) bytes of data.
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=1 ttl=52 time=4.60 ms
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=2 ttl=52 time=4.62 ms
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=3 ttl=52 time=4.24 ms
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=4 ttl=52 time=4.53 ms
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=5 ttl=52 time=6.46 ms
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=6 ttl=52 time=4.63 ms
^C
--- www.baidu.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5008ms
rtt min/avg/max/mdev = 4.249/4.852/6.464/0.734 ms
# 

ping通了www.baidu.com,那就不存在“到不了它那裏”的說法。

有可能測試的路徑長度不夠,因爲traceroute默認爲最多30跳(30 hops max)。那就改一下吧,改爲最大,255。

#traceroute -m 255 -n www.baidu.com

選項:
-m max_ttl,設置最大跳數。

注:跳只是形象化,其實就是ttl。

測試2

# traceroute -m 255 -n www.baidu.com
traceroute to www.baidu.com (183.232.231.173), 255 hops max, 60 byte packets
 1  192.168.1.1  0.956 ms  0.941 ms  1.807 ms
 2  10.30.8.1  2.684 ms  3.126 ms  3.506 ms
 3  172.16.254.1  4.674 ms  4.567 ms  4.908 ms
 4  10.0.3.9  3.380 ms  4.176 ms  4.176 ms
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
...(中間省略,全是星號)
247  * * *
248  * * *
249  * * *
250  * * *
251  * * *
252  * * *
253  * * *
254  * * *
255  * * *
#

漫長的等待,終於結束了。結果還是失敗了,還比不改hops(測試1)還慘,至少測試1還可以出外網。比較測試1和測試2,測試1可是到達了120開頭的地址,而測試2在4跳的內網後就全是星星了。
(唉,自作孽,想的解決辦法太簡單了,結果浪費時間)

找個合理的理由安慰自己。
因爲這traceroute的原理理論上是可以測出自己和外網所有路徑,而且能測出外網的延遲值,即服務商的當時網絡的擁塞。如果長時間測試(幾天?),可以測出服務商線路的好壞。
排除網絡擁塞原因,就是有些服務商那邊不迴應相關的消息,以防止別人測試。(當然也有的是防止攻擊纔不迴應的,或者其他原因)

算了,管他爲什麼沒回應。沒回應就是沒回應,但是我在網上看見有人traceroute?可以到達www.baidu.com。難道真的是我的網絡問題?我不服,拿Windows試試吧!(我是不情願在Windows下搞相關學習的,迫於無奈,只好用了)

在cmd下,(我的Windows和Linux存在同一局域網)

dir>tracert -d www.baidu.com

選項:
-d,就是traceroute的-n選項

(tracert的參數選項和traceroute是不一樣的喔!)

測試3

dir>tracert -d www.baidu.com

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

  1    <1 毫秒   <1 毫秒   <1 毫秒 192.168.1.1
  2     1 ms     1 ms     1 ms  10.30.8.1
  3     2 ms     2 ms     2 ms  172.16.254.1
  4     1 ms     1 ms     1 ms  10.0.3.9
  5     1 ms     *        *     10.0.4.6
  6     *        *        *     請求超時。
  7     *        4 ms     5 ms  120.196.2.9
  8     *        *        *     請求超時。
  9     *        *        *     請求超時。
 10     *        *        5 ms  120.241.49.38
 11     *        *        *     請求超時。
 12     *        *        *     請求超時。
 13     *        4 ms     *     183.232.231.172
 14     4 ms     3 ms     4 ms  183.232.231.172

跟蹤完成。

dir>

What?什麼?在Windows下就成功了,而且才14跳。想想,在網上測試的也是在Windows。
可惡,爲啥在Windows就行了呢?(我是偏愛linux的,嘻嘻)

題外:
發現沒有,在剛測試中,明明13跳就到了www.baidu.com(183.232.231.172),爲什麼還要測試14跳呢?給我自己一個合理的理由就是有關於負載均衡或者協議的原因。

沒想太多。看了一下traceroute的手冊,發現可以換協議來測試路徑,而且記得traceroute默認用ICMP協議的。(沒記錯的話。。。)

換一下TCP協議來測試

#traceroute -n -T www.baidu.com

測試4

# traceroute -n -T www.baidu.com
traceroute to www.baidu.com (183.232.231.173), 30 hops max, 60 byte packets
 1  192.168.1.1  0.890 ms  1.060 ms  1.116 ms
 2  10.30.8.1  5.329 ms  5.365 ms  5.334 ms
 3  172.16.254.1  5.732 ms  5.809 ms  6.786 ms
 4  10.0.3.9  5.364 ms  5.407 ms  7.117 ms
 5  10.0.4.6  7.665 ms  7.849 ms  8.913 ms
 6  120.236.177.1  265.702 ms  265.746 ms  362.185 ms
 7  120.196.2.97  13.975 ms  9.700 ms 120.196.2.9  9.971 ms
 8  120.196.0.1  10.247 ms  10.119 ms 120.196.240.41  9.271 ms
 9  211.136.198.6  15.544 ms  15.708 ms 120.197.29.2  15.289 ms
10  * * *
11  * * *
12  * * 183.232.231.173  7.702 ms
#

嘿嘿,成功了。這次在linux測試,換了TCP協議,12跳就成功。12跳和測試3 Windows 下的14跳相差不大,因爲可以走不同的路到www.baidu.com嘛。至於爲啥路徑不同,引起的原因有很多。
可以慶幸的是無論是Windows(測試3)還是Linux(測試4)7跳那裏,都曾經過同一個路由(120.196.2.9),證明每次測試的路徑有很大程度相似。
爲啥說慶幸呢?因爲我抱着懷疑的態度用traceroute。初入網絡世界,網絡究竟的怎樣的,只有在圖上看別人的描繪。至於那些圖是不是真的,我是懷疑,只有自己親身看到或者感受才能確定。之前沒有辦法考察,但是知道有traceroute後,就有辦法了,嘻嘻。


結論
1. 有些服務商關閉了ICMP某些迴應。
2. Windows的tracert有很大可能不是使用ICMP協議來探測,猜測是TCP協議。(因爲和traceroute -T得回的結果有很大的相似。當然我不準備去證明我的猜測)
3. traceroute最好加上(-T)來使用TCP探測自己到外網的網絡拓撲。(我用其他地址的電腦試過,不加-T的話,就只有漫漫的等待和失望的結果)

(本人是小白,如果有大神覺得我哪裏錯了,請指點 QwQ)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章