2345技術員聯盟

Windows下Ping命令知識詳解

  • 來源:電腦技術網 原創
  • 時間:2014-12-09
  • 閱讀:
  • 本文標簽:windowsping

Windows下的Ping命令,是網絡管理員必學的知識,Ping是Windows下的一個命令在Unix和Linux下也有這個命令。ping也屬于一個通信協議,是TCP/IP協議的一部分。利用“ping”命令可以檢查網絡是否連通,可以很好地幫助我們分析和判定網絡故障。

 

  1. ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [-j computer-list] │ [-k computer-list] [-w timeout] destination-list 
  2. Options: 
  3. -t Ping the specified host until stopped.To see statistics and continue - type Control-Break;To stop - type Control-C. 

 

不停的ping地方主機,直到你按下Control-C。

此功能沒有什么特別的技巧,不過可以配合其他參數使用,將在下面提到。

 

  1. -a Resolve addresses to hostnames. 

解析計算機NetBios名。

 

  1. 示例:C:\>ping -a 192.168.1.21 
  2.  
  3. Pinging iceblood.yofor.com [192.168.1.21] with 32 bytes of data: 
  4.  
  5. Reply from 192.168.1.21: bytes=32 time<10ms TTL=254 
  6.  
  7. Reply from 192.168.1.21: bytes=32 time<10ms TTL=254 
  8.  
  9. Reply from 192.168.1.21: bytes=32 time<10ms TTL=254 
  10.  
  11. Reply from 192.168.1.21: bytes=32 time<10ms TTL=254 
  12.  
  13. Ping statistics for 192.168.1.21: 
  14.  
  15. Packets: Sent = 4Received = 4Lost = 0 (0% loss),Approximate round trip times in milli-seconds: 
  16.  
  17. Minimum = 0msMaximum = 0msAverage = 0ms 

 

從上面就可以知道IP為192.168.1.21的計算機NetBios名為iceblood.yofor.com。

 

  1. -n count Number of echo requests to send. 

發送count指定的Echo數據包數。

在默認情況下,一般都只發送四個數據包,通過這個命令可以自己定義發送的個數,對衡量網絡速度很有幫助,比如我想測試發送50個數據包的返回的平均時間為多少,最快時間為多少,最慢時間為多少就可以通過以下獲知:

 

  1. C:\>ping -n 50 202.103.96.68 
  2.  
  3. Pinging 202.103.96.68 with 32 bytes of data: 
  4.  
  5. Reply from 202.103.96.68: bytes=32 time=50ms TTL=241 
  6.  
  7. Reply from 202.103.96.68: bytes=32 time=50ms TTL=241 
  8.  
  9. Reply from 202.103.96.68: bytes=32 time=50ms TTL=241 
  10.  
  11. Request timed out. 
  12.  
  13. ……………… 
  14.  
  15. Reply from 202.103.96.68: bytes=32 time=50ms TTL=241 
  16.  
  17. Reply from 202.103.96.68: bytes=32 time=50ms TTL=241 
  18.  
  19. Ping statistics for 202.103.96.68: 
  20.  
  21. Packets: Sent = 50Received = 48Lost = 2 (4% loss),Approximate round trip times in milli-seconds: 
  22.  
  23. Minimum = 40msMaximum = 51msAverage = 46ms 

 

從以上我就可以知道在給202.103.96.68發送50個數據包的過程當中,返回了48個,其中有兩個由于未知原因丟失,這48個數據包當中返回速度最快為40ms,最慢為51ms,平均速度為46ms。

 

  1. -l size Send buffer size. 

定義echo數據包大小。

在默認的情況下windows的ping發送的數據包大小為32byt,我們也可以自己定義它的大小,但有一個大小的限制,就是最大只能發送65500byt,也許有人會問為什么要限制到65500byt,因為Windows系列的系統都有一個安全漏洞(也許還包括其他系統)就是當向對方一次發送的數據包大于或等于65532時,對方就很有可能擋機,所以微軟公司為了解決這一安全漏洞于是限制了ping的數據包大小。雖然微軟公司已經做了此限制,但這個參數配合其他參數以后危害依然非常強大,比如我們就可以通過配合-t參數來實現一個帶有攻擊性的命令:(以下介紹帶有危險性,僅用于試驗,請勿輕易施于別人機器上,否則后果自負)

 

  1. C:\>ping -l 65500 -t 192.168.1.21 
  2.  
  3. Pinging 192.168.1.21 with 65500 bytes of data: 
  4.  
  5. Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254 
  6.  
  7. Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254 
  8.  
  9. ……………… 

 

這樣它就會不停的向192.168.1.21計算機發送大小為65500byt的數據包,如果你只有一臺計算機也許沒有什么效果,但如果有很多計算機那么就可以使對方完全癱瘓,我曾經就做過這樣的試驗,當我同時使用10臺以上計算機ping一臺Win2000Pro系統的計算機時,不到5分鐘對方的網絡就已經完全癱瘓,網絡嚴重堵塞,HTTP和FTP服務完全停止,由此可見威力非同小可。

 

  1. -f Set Don't Fragment flag in packet. 

在數據包中發送“不要分段”標志。

在一般你所發送的數據包都會通過路由分段再發送給對方,加上此參數以后路由就不會再分段處理。

 

  1. -i TTL Time To Live. 

指定TTL值在對方的系統里停留的時間。

此參數同樣是幫助你檢查網絡運轉情況的。

 

  1. -v TOS Type Of Service. 

將“服務類型”字段設置為 tos 指定的值。

 

  1. -r count Record route for count hops

在“記錄路由”字段中記錄傳出和返回數據包的路由。

在一般情況下你發送的數據包是通過一個個路由才到達對方的,但到底是經過了哪些路由呢?通過此參數就可以設定你想探測經過的路由的個數,不過限制在了9個,也就是說你只能跟蹤到9個路由,如果想探測更多,可以通過其他命令實現,我將在以后的文章中給大家講解。以下為示例:

 

  1. C:\>ping -n 1 -r 9 202.96.105.101 (發送一個數據包,最多記錄9個路由) 
  2.  
  3. Pinging 202.96.105.101 with 32 bytes of data: 
  4.  
  5. Reply from 202.96.105.101: bytes=32 time=10ms TTL=249 
  6.  
  7. Route: 202.107.208.187 -> 
  8.  
  9. 202.107.210.214 -> 
  10.  
  11. 61.153.112.70 -> 
  12.  
  13. 61.153.112.89 -> 
  14.  
  15. 202.96.105.149 -> 
  16.  
  17. 202.96.105.97 -> 
  18.  
  19. 202.96.105.101 -> 
  20.  
  21. 202.96.105.150 -> 
  22.  
  23. 61.153.112.90 
  24.  
  25. Ping statistics for 202.96.105.101: 
  26.  
  27. Packets: Sent = 1Received = 1Lost = 0 (0% loss), 
  28.  
  29. Approximate round trip times in milli-seconds: 
  30.  
  31. Minimum = 10msMaximum = 10msAverage = 10ms 

 

從上面我就可以知道從我的計算機到202.96.105.101一共通過了202.107.208.187 ,202.107.210.214 , 61.153.112.70 , 61.153.112.89 , 202.96.105.149 , 202.96.105.97這幾個路由。

 

  1. -s count Timestamp for count hops. 

指定 count 指定的躍點數的時間戳。

此參數和-r差不多,只是這個參數不記錄數據包返回所經過的路由,最多也只記錄4個。

 

  1. -j host-list Loose source route along host-list. 

利用 computer-list 指定的計算機列表路由數據包。連續計算機可以被中間網關分隔(路由稀疏源)IP 允許的最大數量為 9。

 

  1. -k host-list Strict source route along host-list. 

利用 computer-list 指定的計算機列表路由數據包。連續計算機不能被中間網關分隔(路由嚴格源)IP 允許的最大數量為 9。

 

  1. -w timeout Timeout in milliseconds to wait for each reply. 

指定超時間隔,單位為毫秒。

此參數沒有什么其他技巧。

ping命令的其他技巧:在一般情況下還可以通過ping對方讓對方返回給你的TTL值大小,粗略的判斷目標主機的系統類型是Windows系列還是UNIX/Linux系列,一般情況下Windows系列的系統返回的TTL值在100-130之間,而UNIX/Linux系列的系統返回的TTL值在240-255之間,當然TTL的值在對方的主機里是可以修改的,Windows系列的系統可以通過修改注冊表以下鍵值實現:

 

  1. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] 
  2.  
  3. "DefaultTTL"=dword:000000ff 
  4.  
  5. 255---FF 
  6.  
  7. 128---80 
  8.  
  9. 64----40 
  10.  
  11. 32----20 

 

還有比較基本的,大家都會的:

說得詳解一點

-a 將目標的機器標識轉換為ip地址

-t 若使用者不人為中斷會不斷的ping下去

-c count 要求ping命令連續發送數據包,直到發出并接收到count個請求

-d 為使用的套接字打開調試狀態

-f 是一種快速方式ping。使得ping輸出數據包的速度和數據包從遠程主機返回一樣快,或者更快,達到每秒100次。在這種方式下,每個請求用一個句點表示。對于每一個響應打印一個空格鍵。

-i seconds 在兩次數據包發送之間間隔一定的秒數。不能同-f一起使用。

-n 只使用數字方式。在一般情況下ping會試圖把IP地址轉換成主機名。這個選項要求ping打印IP地址而不去查找用符號表示的名字。如果由于某種原因無法使用本地DNS服務器這個選項就很重要了。

-p pattern 擁護可以通過這個選項標識16 pad字節,把這些字節加入數據包中。當在網絡中診斷與數據有關的錯誤時這個選項就非常有用。

-q 使ping只在開始和結束時打印一些概要信息。

-R 把ICMP RECORD-ROUTE選項加入到ECHO_REQUEST數據包中,要求在數據包中記錄路由,這樣當數據返回時ping就可以把路由信息打印出來。每個數據包只能記錄9個路由節點。許多主機忽略或者放棄這個選項。

-r 使ping命令旁路掉用于發送數據包的正常路由表。

-s packetsize 使用戶能夠標識出要發送數據的字節數。缺省是56個字符,再加上8個字節的ICMP數據頭,共64個ICMP數據字節。

-v 使ping處于verbose方式。它要ping命令除了打印ECHO-RESPONSE數據包之外,還打印其它所有返回的ICMP數據包。

校驗與遠程計算機或本地計算機的連接。只有在安裝 TCP/IP 協議之后才能使用該命令。

 

  1. ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [-j computer-list] │ [-k computer-list] [-w timeout] destination-list 

參數

-t

校驗與指定計算機的連接,直到用戶中斷。

-a

將地址解析為計算機名。

-n count

發送由 count 指定數量的 ECHO 報文,默認值為 4。

-l length

發送包含由 length 指定數據長度的 ECHO 報文。默認值為 64 字節,最大值為 8192 字節。

-f

在包中發送“不分段”標志。該包將不被路由上的網關分段。

-i ttl

將“生存時間”字段設置為 ttl 指定的數值。

-v tos

將“服務類型”字段設置為 tos 指定的數值。

-r count

在“記錄路由”字段中記錄發出報文和返回報文的路由。指定的 Count 值最小可以是 1,最大可以是 9 。

-s count

指定由 count 指定的轉發次數的時間郵票。

-j computer-list

經過由 computer-list 指定的計算機列表的路由報文。中間網關可能分隔連續的計算機(松散的源路由)。允許的最大 IP 地址數目是 9 。

-k computer-list

經過由 computer-list 指定的計算機列表的路由報文。中間網關可能分隔連續的計算機(嚴格源路由)。允許的最大 IP 地址數目是 9 。

-w timeout

以毫秒為單位指定超時間隔。

destination-list

指定要校驗連接的遠程計算機。

關于 Ping 的詳細信息

Ping--注意

Ping 命令通過向計算機發送 ICMP 回應報文并且監聽回應報文的返回,以校驗與遠程計算機或本地計算機的連接。對于每個發送報文, Ping 最多等待 1 秒,并打印發送和接收把報文的數量。比較每個接收報文和發送報文,以校驗其有效性。默認情況下,發送四個回應報文,每個報文包含 64 字節的數據(周期性的大寫字母序列)。

可以使用 Ping 實用程序測試計算機名和 IP 地址。如果能夠成功校驗 IP 地址卻不能成功校驗計算機名,則說明名稱解析存在問題。這種情況下,要保證在本地 HOSTS 文件中或 DNS

數據庫中存在要查詢的計算機名。

下面顯示 Ping 輸出的示例:(Windows用戶可用:開始->運行,輸入"command" 調出command窗口使用此命令)

 

  1. C:\>ping ds.internic.net 
  2.  
  3. Pinging ds.internic.net [192.20.239.132] with 32 bytes of data: 
  4.  
  5. Reply from 192.20.239.132: bytes=32 time=101ms TTL=243 
  6.  
  7. Reply from 192.20.239.132: bytes=32 time=100ms TTL=243 
  8.  
  9. Reply from 192.20.239.132: bytes=32 time=120ms TTL=243 
  10.  
  11. Reply from 192.20.239.132: bytes=32 time=120ms TTL=243 

 

這下比較全了!

Ping 結果中的TTL參數的含義

簡單來說,TTL全程Time to Live,意思就是生存周期。

首先要說明ping命令是使用的網絡層協議ICMP,所以TTL指的是一個網絡層的網絡數據包(package)的生存周期,這句話不懂的先回去復習OSI7層協議去。

第一個問題,為什么要有生存周期這個概念。

很顯然,一個package從一臺機器到另一臺機器中間需要經過很長的路徑,顯然這個路徑不是單一的,是很復雜的,并且很可能存在環路。如果一個數據包在傳輸過程中進入了環路,如果不終止它的話,它會一直循環下去,如果很多個數據包都這樣循環的話,那對于網絡來說這就是災難了。所以需要在包中設置這樣一個值,包在每經過一個節點,將這個值減1,反復這樣操作,最終可能造成2個結果:包在這個值還為正數的時候到達了目的地,或者是在經過一定數量的節點后,這個值減為了0。前者代表完成了一次正常的傳輸,后者代表包可能選擇了一條非常長的路徑甚至是進入了環路,這顯然不是我們期望的,所以在這個值為0的時候,網絡設備將不會再傳遞這個包而是直接將他拋棄,并發送一個通知給包的源地址,說這個包已死。

其實TTL值這個東西本身并代表不了什么,對于使用者來說,關心的問題應該是包是否到達了目的地而不是經過了幾個節點后到達。但是TTL值還是可以得到有意思的信息的。

每個操作系統對TTL值得定義都不同,這個值甚至可以通過修改某些系統的網絡參數來修改,例如Win2000默認為128,通過注冊表也可以修改。而Linux大多定義為64。不過一般來說,很少有人會去修改自己機器的這個值的,這就給了我們機會可以通過ping的回顯TTL來大體判斷一臺機器是什么操作系統。

以我公司2臺機器為例

看如下命令

 

  1. D:/Documents and Settings/hx>ping 61.152.93.131 
  2.  
  3. Pinging 61.152.93.131 with 32 bytes of data: 
  4.  
  5. Reply from 61.152.93.131: bytes=32 time=21ms TTL=118 
  6.  
  7. Reply from 61.152.93.131: bytes=32 time=19ms TTL=118 
  8.  
  9. Reply from 61.152.93.131: bytes=32 time=18ms TTL=118 
  10.  
  11. Reply from 61.152.93.131: bytes=32 time=22ms TTL=118 
  12.  
  13. Ping statistics for 61.152.93.131: 
  14.  
  15. Packets: Sent = 4Received = 4Lost = 0 (0% loss 
  16.  
  17. Approximate round trip times in milli-seconds: 
  18.  
  19. Minimum = 18msMaximum = 22msAverage = 20ms 
  20.  
  21. D:/Documents and Settings/hx>ping 61.152.104.40 
  22.  
  23. Pinging 61.152.104.40 with 32 bytes of data: 
  24.  
  25. Reply from 61.152.104.40: bytes=32 time=28ms TTL=54 
  26.  
  27. Reply from 61.152.104.40: bytes=32 time=18ms TTL=54 
  28.  
  29. Reply from 61.152.104.40: bytes=32 time=18ms TTL=54 
  30.  
  31. Reply from 61.152.104.40: bytes=32 time=13ms TTL=54 
  32.  
  33. Ping statistics for 61.152.104.40: 
  34.  
  35. Packets: Sent = 4Received = 4Lost = 0 (0% loss 
  36.  
  37. Approximate round trip times in milli-seconds: 
  38.  
  39. Minimum = 13msMaximum = 28msAverage = 19ms 

 

第一臺TTL為118,則基本可以判斷這是一臺Windows機器,從我的機器到這臺機器經過了10個節點,因為128-118=10。而第二臺應該是臺Linux,理由一樣64-54=10。

了解了上面的東西,可能有人會有一些疑問,例如以下:

1,不是說包可能走很多路徑嗎,為什么我看到的4個包TTL都是一樣的,沒有出現不同?

這是由于包經過的路徑是經過了一些最優選擇算法來定下來的,在網絡拓撲穩定一段時間后,包的路由路徑也會相對穩定在一個最短路徑上。具體怎么算出來的要去研究路由算法了,不在討論之列。

2,對于上面例子第二臺機器,為什么不認為它是經過了74個節點的Windows機器?因為128-74=54。

對于這個問題,我們要引入另外一個很好的ICMP協議工具。不過首先要聲明的是,一個包經過74個節點這個有些恐怖,這樣的路徑還是不用為好。

要介紹的這個工具是tracert(*nix下為traceroute),讓我們來看對上面的第二臺機器用這個命令的結果

 

  1. D:/Documents and Settings/hx>tracert 61.152.104.40 
  2.  
  3. Tracing route to 61.152.104.40 over a maximum of 30 hops 
  4.  
  5. 01 13 ms 16 ms 09 ms 10.120.32.1 
  6.  
  7. 02 09 ms 09 ms 11 ms 219.233.244.105 
  8.  
  9. 03 12 ms 10 ms 10 ms 219.233.238.173 
  10.  
  11. 04 15 ms 15 ms 17 ms 219.233.238.13 
  12.  
  13. 05 14 ms 19 ms 19 ms 202.96.222.73 
  14.  
  15. 06 14 ms 17 ms 13 ms 202.96.222.121 
  16.  
  17. 07 14 ms 15 ms 14 ms 61.152.81.86 
  18.  
  19. 08 15 ms 14 ms 13 ms 61.152.87.162 
  20.  
  21. 09 16 ms 16 ms 28 ms 61.152.99.26 
  22.  
  23. 10 12 ms 13 ms 18 ms 61.152.99.94 
  24.  
  25. 11 14 ms 18 ms 16 ms 61.152.104.40 
  26.  
  27. Trace complete. 

 

從這個命令的結果能夠看到從我的機器到服務器所走的路由,確實是11個節點(上面說10個好像是我犯了忘了算0的錯誤了,應該是64-54+1,嘿嘿),而不是128的TTL經過了70多個節點。

既然已經說到這里了,不妨順便說說關于這兩個ICMP命令的高級一點的東西。

首先是ping命令,其實ping有這樣一個參數,可以無視操作系統默認TTL值而使用自己定義的值來發送ICMP Request包。

例如還是用那臺Linux機器,用以下命令:

 

  1. D:/Documents and Settings/hx>ping 61.152.104.40 -i 11 
  2.  
  3. Pinging 61.152.104.40 with 32 bytes of data: 
  4.  
  5. Reply from 61.152.104.40: bytes=32 time=10ms TTL=54 
  6.  
  7. Reply from 61.152.104.40: bytes=32 time=13ms TTL=54 
  8.  
  9. Reply from 61.152.104.40: bytes=32 time=10ms TTL=54 
  10.  
  11. Reply from 61.152.104.40: bytes=32 time=13ms TTL=54 
  12.  
  13. Ping statistics for 61.152.104.40: 
  14.  
  15. Packets: Sent = 4Received = 4Lost = 0 (0% loss), 
  16.  
  17. Approximate round trip times in milli-seconds: 
  18.  
  19. Minimum = 10msMaximum = 13msAverage = 11ms 
  20.  
  21. D:/Documents and Settings/hx> 

 

這個命令我們定義了發包的TTL為11,而前面我們知道,我到這臺服務器是要經過11個節點的,所以這個輸出和以前沒什么不同。現在再用這個試試看:

  1. D:/Documents and Settings/hx>ping 61.152.104.40 -i 10 
  2.  
  3. Pinging 61.152.104.40 with 32 bytes of data: 
  4.  
  5. Reply from 61.152.99.94: TTL expired in transit. 
  6.  
  7. Reply from 61.152.99.94: TTL expired in transit. 
  8.  
  9. Reply from 61.152.99.94: TTL expired in transit. 
  10.  
  11. Reply from 61.152.99.94: TTL expired in transit. 
  12.  
  13. Ping statistics for 61.152.104.40: 
  14.  
  15. Packets: Sent = 4Received = 4Lost = 0 (0% loss), 
  16.  
  17. Approximate round trip times in milli-seconds: 
  18.  
  19. Minimum = 0msMaximum = 0msAverage = 0ms 
  20.  
  21. D:/Documents and Settings/hx> 

 

可以看到,結果不一樣了,我定義了TTL為10來發包,結果是TTL expired in transit.就是說在到達服務器之前這個包的生命周期就結束了。注意看這句話前面的ip,這個ip恰好是我們前面tracert結果到服務器之前的最后1個ip,包的TTL就是在這里減少到0了,根據我們前面的討論,當TTL減為0時設備會丟棄包并發送一個TTL過期的ICMP反饋給源地址,這里的結果就是最好的證明。

通過這里再次又證明了從我機器到服務器是經過了11個節點而不是70多個,呵呵。

最后再鞏固一下知識,有人可能覺得tracer這個命令很神奇,可以發現一個包所經過的路由路徑。其實這個命令的原理就在我們上面的討論中。

想象一下,如果我給目的服務器發送一個TTL為1的包,結果會怎樣?

根據前面的討論,在包港出發的第一個節點,TTL就會減少為0,這時這個節點就會回應TTL失效的反饋,這個回應包含了設備本身的ip地址,這樣我們就得到了路由路徑的第一個節點的地址。

因此,我們繼續發送TTL=2的包,也就受到第二個節點的TTL失效回應

依次類推,我們一個一個的發現,當最終返回的結果不是TTL失效而是ICMP Response的時候,我們的tracert也就結束了,就是這么簡單。

順便補一句ping命令還有個-n的參數指定要發包的數量,指定了這個數字就會按照你的要求來發包了而不是默認的4個包。如果使用-t參數的話,命令會一直發包直到你強行中止它

Ping的返回信息有"Request Timed Out"、"Destination Net Unreachable"和"Bad IP address"還有"Source quench received"。

"Request Timed Out"這個信息表示對方主機可以到達到TIME OUT,這種情況通常是為對方拒絕接收你發給它的數據包造成數據包丟失。大多數的原因可能是對方裝有防火墻或已下線。

"Destination Net Unreachable"這個信息表示對方主機不存在或者沒有跟對方建立連接。這里要說明一下"destination host unreachable"和"time out"的區別,如果所經過的路由器的路由表中具有到達目標的路由,而目標因為其它原因不可到達,這時候會出現"time out",如果路由表中連到達目標的路由都沒有,那就會出現"destination host unreachable"。

"Bad IP address" 這個信息表示你可能沒有連接到DNS服務器所以無法解析這個IP地址,也可能是IP地址不存在。

"Source quench received"信息比較特殊,它出現的機率很少。它表示對方或中途的服務器繁忙無法回應。

本文來自電腦技術網www.visaqiaoliang.com),轉載本文請注明來源.
本文鏈接:http://www.visaqiaoliang.com/content/pcfoundation/systemcs/20141209/5710.html
無覓相關文章插件,快速提升流量 日日摸夜夜添夜夜添破第一次_日本午夜福利视频一区二区三区_日韩精品一区二区在线视频