關于Ping命令以及Ping命令的用法
Ping概述:
Ping 是Windows系列自帶的一個可執行命令。利用它可以檢查網絡是否能夠連通,可以很好地幫助我們分析判定網絡故障。該命令只有在安裝了 TCP/IP 協議后才可以使用。Ping命令的主要作用是通過發送數據包并接收應答信息來檢測兩臺計算機之間的網絡是否連通。當網絡出現故障的時候,可以用這個命令來預測故障和確定故障地點。Ping命令成功只是說明當前主機與目的主機之間存在一條連通的路徑。如果不成功,則考慮:網線是否連通、網卡設置是否正確、IP地址是否可用等。
需要注意的是:成功地與另一臺主機進行一次或兩次數據報交換并不表示TCP/IP配置就是正確的,你必須執行大量的本地主機與遠程主機的數據報交換,才能確信TCP/IP的正確性。
按照缺省設置,Windows上運行的Ping命令發送4個ICMP(網間控制報文協議)回送請求,每個32字節數據,如果一切正常,你應能得到4個回送應答。
Ping能夠以毫秒為單位顯示發送回送請求到返回回送應答之間的時間量。如果應答時間短,表示數據報不必通過太多的路由器或網絡連接速度比較快。Ping還能顯示TTL(Time To Live存在時間)值,你可以通過TTL值推算一下數據包已經通過了多少個路由器:源地點TTL起始值(就是比返回TTL略大的一個2的乘方數)-返回時TTL值。例如,返回TTL值為119,那么可以推算數據報離開源地址的TTL起始值為128,而源地點到目標地點要通過9個路由器網段(128-119);如果返回TTL值為246,TTL起始值就是256,源地點到目標地點要通過9個路由器網段。
PING命令參數詳解
1、-a 解析計算機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。
2、n count 發送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。
3、-l 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服務完全停止,由此可見威力非同小可。
4、-f在數據包中發送“不要分段”標志。
在一般你所發送的數據包都會通過路由分段再發送給對方,加上此參數以后路由就不會再分段處理。
5、-i TTL 指定TTL值在對方的系統里停留的時間。
此參數同樣是幫助你檢查網絡運轉情況的。
6、-v TOS 將“服務類型”字段設置為 tos 指定的值。
7、-r count在“記錄路由”字段中記錄傳出和返回數據包的路由。在一般情況下你發送的數據包是通過一個個路由才到達對方的,但到底是經過了哪些路由呢?通過此參數就可以設定你想探測經過的路由的個數,不過限制在了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這幾個路由。
8、-s count指定 count 指定的躍點數的時間戳。
此參數和-r差不多,只是這個參數不記錄數據包返回所經過的路由,最多也只記錄4個。
9、-j host-list利用 computer-list 指定的計算機列表路由數據包。連續計算機可以被中間網關分隔(路由稀疏源)IP 允許的最大數量為 9。
10、-k host-list 利用 computer-list 指定的計算機列表路由數據包。連續計算機不能被中間網關分隔(路由嚴格源)IP 允許的最大數量為 9。
11、-w timeout指定超時間隔,單位為毫秒。
12、-t--連續對IP地址執行Ping命令,直到被用戶以Ctrl+C中斷。
ping命令的其他技巧:
在一般情況下還可以通過ping對方讓對方返回給你的TTL值大小,粗略的判斷目標主機的系統類型是Windows系列還是UNIX/Linux系列,一般情況下Windows系列的系統返回的TTL值在100-130之間,而UNIX/Linux系列的系統返回的TTL值在240-255之間,當然TTL的值在對方的主機里是可以修改的,Windows系列的系統可以通過修改注冊表以下鍵值實現:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DefaultTTL"=dword:000000ff
255---FF
128---80
64----40
32----20
在網絡沒有問題,卻無法PING通時可能有以下一些情況。
1.太心急。即網線剛插到交換機上就想Ping通網關,忽略了生成樹的收斂時 間。當然,較新的交換機都支持快速生成樹,或者有的管理員干脆把用戶端口(access port)的生成樹協議關掉,問題就解決了。
2.訪問控制。不管中間跨越了多少跳,只要有節點(包括端節點)對ICMP進行了過濾,Ping不通是正常的。最常見的就是防火墻的行為。
3.某些路由器端口是不允許用戶Ping的。
還遇到過這樣的情形,更為隱蔽。
1.網絡因設備間的時延太大,造成ICMP echo報文無法在缺省時 間(2秒)內收到。時延的原因有若干,比如線路(衛星網時延上下星為540毫秒),路由器處理時延,或路由設計不合理造成迂回路徑。使用擴展Ping,增加timed out時 間,可Ping通的話就屬路由時延太大問題。
2.引入NAT的場合會造成單向Ping通。NAT可以起到隱蔽內部地址的作用,當由內Ping外時,可以Ping通是因為NAT表的映射關系存在,當由外發起Ping內網主機時,就無從查找邊界路由器的NAT表項了。
3.多路由負載均衡場合。比如Ping遠端目的主機,成功的reply和timed out交錯出現,結果發現在網關路由器上存在兩條到目的網段的路由,兩條路由權重相等,但經查一條路由存在問題。
4.IP地址分配不連續。地址規劃出現問題象是在網絡中埋了地雷,地址重疊或掩碼劃分不連續都可能在Ping時出現問題。比如一個極端情況,A、B兩臺主機,經過多跳相連,A能Ping通B的網關,而且B的網關設置正確,但A、B就是Ping不通。經查,在B的網卡上還設有第二個地址,并且這個地址與A所在的網段重疊。
5.指定源地址的擴展Ping。登陸到路由器上,Ping遠程主機,當ICMP echo request從串行廣域網接口發出去的時候,路由器會指定某個IP地址作為源IP,這個IP地址可能不是此接口的IP或這個接口根本沒有IP地址。而某個下游路由器可能并沒有到這個IP網段的路由,導致不能Ping通。可以采用擴展Ping,指定好源IP地址。
當主機網關和中間路由的配置認為正確時,出現Ping問題也是很普遍的現象。此時應該忘掉"不可能"幾個字,把Ping的擴展參數和反饋信息、traceroute、路由器debug、以及端口鏡像和Sniffer等工具結合起來進行分析。
比如,當A、B兩臺主機經過多跳路由器相連時,二者網關設置正確,在A上可以Ping通B,但在B上不能Ping通A。可以通過在交換機做鏡像,并用Sniffer抓包,來找出ICMP 報文終止于何處,報文內容是什么,就可以發現ICMP報文中的源IP地址并非預期的那樣,此時很容易想象出可能是路由器的NAT功能使然,這樣就能夠逐步地發現一些被忽視的問題。而Ping不通時的反饋信息是"destination_net_unreachable"還是"timed out"也是有區別的
利用PING來檢查網絡狀態的方法:
1.Ping本機IP
例如本機IP地址為:172.168.200.2。則執行命令Ping 172.168.200.2。如果網卡安裝配置沒有問題,則應有類似下列顯示:
Replay from 172.168.200.2 bytes=32 time<10ms
Ping statistics for 172.168.200.2
Packets Sent=4 Received=4 Lost=0 0% loss
Approximate round trip times in milli-seconds
Minimum=0ms Maxiumu=1ms Average=0ms
如果在MS-DOS方式下執行此命令顯示內容為:Request timed out,則表明網卡安裝或配置有問題。將網線斷開再次執行此命令,如果顯示正常,則說明本機使用的IP地址可能與另一臺正在使用的機器IP地址重復了。如果仍然不正常,則表明本機網卡安裝或配置有問題,需繼續檢查相關網絡配置。
2.Ping網關IP
假定網關IP為:172.168.6.1,則執行命令Ping 172.168.6.1。在MS-DOS方式下執行此命令,如果顯示類似以下信息:
Reply from 172.168.6.1 bytes=32 time=9ms TTL=255
Ping statistics for 172.168.6.1
Packets Sent=4 Received=4 Lost=0
Approximate round trip times in milli-seconds
Minimum=1ms Maximum=9ms Average=5ms
則表明局域網中的網關路由器正在正常運行。反之,則說明網關有問題。
3.Ping遠程IP
這一命令可以檢測本機能否正常訪問Internet。比如本地電信運營商的IP地址為:202.102.48.141。在MS-DOS方式下執行命令:Ping 202.102.48.141,如果屏幕顯示:
Reply from 202.102.48.141 bytes=32 time=33ms TTL=252
Reply from 202.102.48.141 bytes=32 time=21ms TTL=252
Reply from 202.102.48.141 bytes=32 time=5ms TTL=252
Reply from 202.102.48.141 bytes=32 time=6ms TTL=252
Ping statistics for 202.102.48.141
Packets Sent=4 Received=4 Lost=0 0% loss
Approximate round trip times in milli-seconds
Minimum=5ms Maximum=33ms Average=16ms
則表明運行正常,能夠正常接入互聯網。反之,則表明主機文件(windows/host)存在問題。