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)