windows下ping命令知識大全

來源:互聯網
上載者:User

   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

  Options:

  -t Ping the specified host until stopped.To see statistics and continue - type Control-Break;To stop - type Control-C.

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

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

  -a Resolve addresses to hostnames.

  解析電腦NetBios名。

  樣本:C:>ping -a 192.168.1.21

  Pinging iceblood.yofor.com [192.168.1.21] with 32 bytes of data:

  Reply from 192.168.1.21: bytes=32 time<10ms TTL=254

  Reply from 192.168.1.21: bytes=32 time<10ms TTL=254

  Reply from 192.168.1.21: bytes=32 time<10ms TTL=254

  Reply from 192.168.1.21: bytes=32 time<10ms TTL=254

  Ping statistics for 192.168.1.21:

  Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in milli-seconds:

  Minimum = 0ms, Maximum = 0ms, Average = 0ms

  從上面就可以知道IP為192.168.1.21的電腦NetBios名為iceblood.yofor.com。

  -n count Number of echo requests to send.

  發送count指定的Echo資料包數。

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

  C:>ping -n 50 202.103.96.68

  Pinging 202.103.96.68 with 32 bytes of data:

  Reply from 202.103.96.68: bytes=32 time=50ms TTL=241

  Reply from 202.103.96.68: bytes=32 time=50ms TTL=241

  Reply from 202.103.96.68: bytes=32 time=50ms TTL=241

  Request timed out.

  ………………

  Reply from 202.103.96.68: bytes=32 time=50ms TTL=241

  Reply from 202.103.96.68: bytes=32 time=50ms TTL=241

  Ping statistics for 202.103.96.68:

  Packets: Sent = 50, Received = 48, Lost = 2 (4% loss),Approximate round trip times in milli-seconds:

  Minimum = 40ms, Maximum = 51ms, Average = 46ms

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

  -l size Send buffer size.

  定義echo資料包大小。

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

  C:>ping -l 65500 -t 192.168.1.21

  Pinging 192.168.1.21 with 65500 bytes of data:

  Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254

  Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254

  ………………

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

  -f Set Don't Fragment flag in packet.

  在資料包中發送“不要分段”標誌。

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

  -i TTL Time To Live.

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

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

  -v TOS Type Of Service.

  將“服務類型”欄位設定為 tos 指定的值。

  -r count Record route for count hops.

  在“記錄路由”欄位中記錄傳出和返回資料包的路由。

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

  C:>ping -n 1 -r 9 202.96.105.101 (發送一個資料包,最多記錄9個路由)

  Pinging 202.96.105.101 with 32 bytes of data:

  Reply from 202.96.105.101: bytes=32 time=10ms TTL=249

  Route: 202.107.208.187 ->

  202.107.210.214 ->

  61.153.112.70 ->

  61.153.112.89 ->

  202.96.105.149 ->

  202.96.105.97 ->

  202.96.105.101 ->

  202.96.105.150 ->

  61.153.112.90

  Ping statistics for 202.96.105.101:

  Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),

  Approximate round trip times in milli-seconds:

  Minimum = 10ms, Maximum = 10ms, Average = 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這幾個路由。

  -s count Timestamp for count hops.

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

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

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

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

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

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

  -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系列的系統可以通過修改註冊表以下索引值實現:

  [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters]

  "DefaultTTL"=dword:000000ff

  255---FF

  128---80

  64----40

  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 協議之後才能使用該命令。

  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視窗使用此命令)

  C:>ping ds.internic.net

  Pinging ds.internic.net [192.20.239.132] with 32 bytes of data:

  Reply from 192.20.239.132: bytes=32 time=101ms TTL=243

  Reply from 192.20.239.132: bytes=32 time=100ms TTL=243

  Reply from 192.20.239.132: bytes=32 time=120ms TTL=243

  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台機器為例

  看如下命令

  D:/Documents and Settings/hx>ping 61.152.93.131

  Pinging 61.152.93.131 with 32 bytes of data:

  Reply from 61.152.93.131: bytes=32 time=21ms TTL=118

  Reply from 61.152.93.131: bytes=32 time=19ms TTL=118

  Reply from 61.152.93.131: bytes=32 time=18ms TTL=118

  Reply from 61.152.93.131: bytes=32 time=22ms TTL=118

  Ping statistics for 61.152.93.131:

  Packets: Sent = 4, Received = 4, Lost = 0 (0% loss

  Approximate round trip times in milli-seconds:

  Minimum = 18ms, Maximum = 22ms, Average = 20ms

  D:/Documents and Settings/hx>ping 61.152.104.40

  Pinging 61.152.104.40 with 32 bytes of data:

  Reply from 61.152.104.40: bytes=32 time=28ms TTL=54

  Reply from 61.152.104.40: bytes=32 time=18ms TTL=54

  Reply from 61.152.104.40: bytes=32 time=18ms TTL=54

  Reply from 61.152.104.40: bytes=32 time=13ms TTL=54

  Ping statistics for 61.152.104.40:

  Packets: Sent = 4, Received = 4, Lost = 0 (0% loss

  Approximate round trip times in milli-seconds:

  Minimum = 13ms, Maximum = 28ms, Average = 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),讓我們來看對上面的第二台機器用這個命令的結果

  D:/Documents and Settings/hx>tracert 61.152.104.40

  Tracing route to 61.152.104.40 over a maximum of 30 hops

  01 13 ms 16 ms 09 ms 10.120.32.1

  02 09 ms 09 ms 11 ms 219.233.244.105

  03 12 ms 10 ms 10 ms 219.233.238.173

  04 15 ms 15 ms 17 ms 219.233.238.13

  05 14 ms 19 ms 19 ms 202.96.222.73

  06 14 ms 17 ms 13 ms 202.96.222.121

  07 14 ms 15 ms 14 ms 61.152.81.86

  08 15 ms 14 ms 13 ms 61.152.87.162

  09 16 ms 16 ms 28 ms 61.152.99.26

  10 12 ms 13 ms 18 ms 61.152.99.94

  11 14 ms 18 ms 16 ms 61.152.104.40

  Trace complete.

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

  既然已經說到這裡了,不妨順便說說關於這兩個ICMP命令的進階一點的東西。

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

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

  D:/Documents and Settings/hx>ping 61.152.104.40 -i 11

  Pinging 61.152.104.40 with 32 bytes of data:

  Reply from 61.152.104.40: bytes=32 time=10ms TTL=54

  Reply from 61.152.104.40: bytes=32 time=13ms TTL=54

  Reply from 61.152.104.40: bytes=32 time=10ms TTL=54

  Reply from 61.152.104.40: bytes=32 time=13ms TTL=54

  Ping statistics for 61.152.104.40:

  Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

  Approximate round trip times in milli-seconds:

  Minimum = 10ms, Maximum = 13ms, Average = 11ms

  D:/Documents and Settings/hx>

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

  D:/Documents and Settings/hx>ping 61.152.104.40 -i 10

  Pinging 61.152.104.40 with 32 bytes of data:

  Reply from 61.152.99.94: TTL expired in transit.

  Reply from 61.152.99.94: TTL expired in transit.

  Reply from 61.152.99.94: TTL expired in transit.

  Reply from 61.152.99.94: TTL expired in transit.

  Ping statistics for 61.152.104.40:

  Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

  Approximate round trip times in milli-seconds:

  Minimum = 0ms, Maximum = 0ms, Average = 0ms

  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"資訊比較特殊,它出現的機率很少。它表示對方或中途的伺服器繁忙無法回應。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.