1、Windows中的ping, ping6: 發送ICMP ECHO_REQUEST到網絡主機。ping6是ICMPv6版的ping實作。
-t:不停地ping指定的主機,要檢視統計資訊并繼續ping,按Ctl+Break;要停止按Ctl+C。
-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。
-n count:發送count指定的Echo資料包數。在預設情況下,一般都隻發送四個資料包,通過這個指令可以自己定義發送的個數,
對衡量網絡速度很有幫助,比如我想測試發送50個資料包的傳回的平均時間為多少,最快時間為多少,最慢時間為多少就可以通過以
下獲知:
C:/>ping -n 50 9.125.92.231
Pinging 9.125.92.231 with 32 bytes of data:
Reply from 9.125.92.231: bytes=32 time=1ms TTL=124
Reply from 9.125.92.231: bytes=32 time=1ms TTL=124
Reply from 9.125.92.231: bytes=32 time=1ms TTL=124
Reply from 9.125.92.231: bytes=32 time=1ms TTL=124
Request timed out.
Reply from 9.125.92.231: bytes=32 time=1ms TTL=124
......
Reply from 9.125.92.231: bytes=32 time=1ms TTL=124
Request timed out.
Reply from 9.125.92.231: bytes=32 time=1ms TTL=124
......
Reply from 9.125.92.231: bytes=32 time=1ms TTL=124
Reply from 9.125.92.231: bytes=32 time<1ms TTL=124
Ping statistics for 9.125.92.231:
Packets: Sent = 50, Received = 48, Lost = 2 (4% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 5ms, Average = 1ms
從以上我就可以知道在給9.125.92.231發送50個資料包的過程當中,傳回了48個,其中有兩個由于未知原因丢失,還顯示了這
48個資料包當中傳回速度最快的、最慢的,以及平均速度。
-l size:定義echo資料包大小。在預設的情況下windows的ping發送的資料包大小為32 byte,我們也可以自己定義它的大小,
但有一個大小的限制,就是最大隻能發送65500 byte,也許有人會問為什麼要限制到65500 byte,因為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計算機發送大小為65500 byte的資料包,如果你隻有一台計算機也許沒有什麼效果,但如果
有很多計算機那麼就可以使對方完全癱瘓,我曾經就做過這樣的試驗,當我同時使用10台以上計算機ping一台Win2000 Pro系統的計
算機時,不到5分鐘對方的網絡就已經完全癱瘓,網絡嚴重堵塞,HTTP和FTP服務完全停止,由此可見威力非同小可。
-f:在資料包中發送“不要分段”标志。在一般你所發送的資料包都會通過路由分段再發送給對方,加上此參數以後路由就不會
再分段處理。
-i TTL:指定TTL值在對方的系統裡停留的時間。此參數同樣是幫助你檢查網絡運轉情況的。
-v TOS:将“服務類型”字段設定為 tos 指定的值。
-r count:記錄計數躍點的路由,即在“記錄路由”字段中記錄傳出和傳回資料包的路由。在一般情況下你發送的資料包是通過一個個路由才到達對方的,但到底是經過了哪些路由呢?通過此參數就可以設定你想探測經過的路由的個數,不過限制在了9 個,也就是說你隻能跟蹤到9個路由,如果想探測更多,可以通過其他指令實作。下面示例為發送一個資料包,最多記錄9個路由:
C:\>ping -n 1 -r 9 202.96.105.101
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:指定count個躍點數的時間戳。此參數和-r差不多,隻是這個參數不記錄資料包傳回所經過的路由,最多也隻記錄4個。
-j host-list:記錄指定主機清單的松散源路由資料包。連續主機可以被中間網關分隔(路由稀疏源),IP允許的最大數量為9。
-k host-list:記錄指定主機清單的嚴格源路由資料包。連續主機不能被中間網關分隔(路由嚴格源),IP允許的最大數量為9。
-w timeout:等待每次回複的逾時間隔,機關為毫秒。此參數沒有什麼其他技巧。
ping指令的其他技巧:通過ping回顯的TTL值判斷目标主機的系統類型是Windows還是UNIX/Linux。
TTL是IPv4協定標頭中的一個值,它告訴網絡路由器包在網絡中的時間是否太長而應被丢棄。有很多原因使包在一定時間内不能被傳遞到目的地。例如,不正确的路由表可能導緻包的無限循環。一個解決方法就是在一段時間後丢棄這個包,然後給發送者一個封包,由發送者決定是否要重發。TTL的初值通常是系統預設值,是標頭中的8位的域。TTL的最初設想是确定一個時間範圍,超過此時間就把包丢棄。由于每個路由器都至少要把TTL域減1,TTL通常表示包在被丢棄前最多能經過的路由器個數。當記數到0時,路由器決定丢棄該包,并發送一個ICMP封包給最初的發送者。ping和tracerouter都使用TTL值以嘗試到達給定的主機或跟蹤到那個主機的路由。traceroute把包的TTL值設得較小,使它在到達目的地的路上被各個路由器連續的丢棄。發出包到收到傳回的ICMP封包之間的時間用來計算從一個路由器到另一個路由器的時間。
一般不同作業系統的預設TTL值不同,是以我們通常可以通過ping回顯的TTL值判斷目标系統的類型,當然這是正确的,但不是TTL的功能,隻是對TTL了解的一個應用。TTL的值可以修改。有些特殊的系統(如NIDS)會定義特殊的TTL值,以拒絕非法通路資料進入。我們在執行PING指令時可以用-i參數指定TTL值,以指定資料報被路由器丢棄之前允許通過的網段數量。大家可以将TTL設定為0,則該包将被立即丢棄,如ping -i 0 127.0.0.1。TTL是由發送主機設定的,以防止資料包不斷在IP網際網路絡上永不終止地循環。轉發IP資料包時,要求路由器至少将TTL減小1。
常見作業系統的預設TTL值:
Windows 95/98/ME系列:32
Windows NT系列(2000/XP/7):128
Linux系列:64
UNIX系列:255
詳細的TTL預設值清單如下:
作業系統 TCP傳輸 UDP傳輸
AIX 60 30
DEC Patchworks V5 30 30
FreeBSD 2.1 64 64
FreeBSD 3.4, 4.x 255 255
OpenBSD 2.6, 2.7 255 255
NetBSD 255 255
HP-UX 9.0x 30 30
HP-UX 10.01 64 64
HP-UX 10.20 255 255
Irix 5.3, 6.x 60 60
UNIX 255 255
Linux 64 64
MacOS/MacTCP 2.0.x 60 60
OS/2 TCP/IP 3.0 64 64
OSF/1 V3.2A 60 30
Solaris 2.x 255 255
SunOS 4.1.3/4.1.4 60 60
Ultrix V4.1/V4.2A 60 30
VMS/Multinet 64 64
VMS/TCPware 60 64
VMS/Wollongong 1.1.1.1 128 30
VMS/UCX (latest rel.) 128 128
Windows 95/98/NT 3.51 32 32
Windows NT4.0/2000/XP/2003 128 128
Windows Vista/7/2008 128 128
一般情況下Windows系列的系統傳回的TTL值在100-130之間,而UNIX/Linux系列的系統傳回的TTL值在240-255之間。當然這樣的辦法隻是粗略地判斷,因為TTL預設值在系統裡是能被手動更改的(但是一般人不會去更改),例如,Windows系列的系統可以通過修改系統資料庫鍵HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters中的DefaultTTL的值,如修改成000000ff則表示255。常用的值為255---FF,128---80,64----40,32----20。
2、Linux中的ping和ping6: 發送ICMP協定的ECHO_REQUEST資料包給主機或網關,以擷取ICMP ECHO_RESPONSE響應。ping指令主要用于确定網絡和各外部主機的狀态、跟蹤和隔離硬體和軟體問題、測試、評估和管理網絡。每一個ECHO_REQUEST資料包有一個IP頭和ICMP頭,後跟一個timeval結構和數目不定的填充位元組,以填充資料包中剩下的空間。ping6由于使用ICMPv6,是以還能發送節點資訊查詢(RFC4620)。
ping指令每秒發送一個資料報并且為每個接收到的響應顯示一行輸出。它會計算信号往返時間和包丢失情況的統計資訊,并且在完成之後顯示一個簡要總結。ping 指令在程式逾時或當接收到SIGINT信号時結束。Host參數或者是一個有效的主機名或者是網際網路位址。主要選項:
-c count:指定發送的資料包個數。
-f:使用洪泛ping。每一次發送 ECHO_REQUEST,都顯示一個句号,而每接收到一個 ECHO_REPLY 信号,就顯示一個倒退。這就提供了一種對多少資訊包被丢棄的資訊的快速顯示。如果沒有設定時間間隔,則時間間隔預設為0,且響應包會盡快傳回(或每秒100次,選擇較快的一個)。隻有超級使用者可以使用這個選項。
-i interval:設定包發送之間等待的時間間隔(秒數)。預設等待時間為1秒(在洪泛模式下則為0)。隻有超級使用者能設定小于0.2秒的值。
-I:指定裝置的源位址,可以是IP位址或裝置名。
-p pattern:指定多達16個填充位元組去填充發送的資料包。這有利于診斷一個網絡對資料依賴的問題。例如-p ff全部用1填充資訊包。
-R:記錄路由。在ECHO_REQUEST包中包含RECORD_ROUTE選項,并且顯示傳回包中的路由緩存。注意IP頭僅僅大到适合9個這樣的路由。而且,許多主機和網關忽略這個選項。
-r:資訊包繞開正常的路由表以直接發送到目标主機。如果主機不在一個直接連接配接的網絡上,将傳回一個錯誤。這個選項的作用是可以通過一個沒有路由經過的接口(用-I選項指定)來ping一台本地主機。
-s:指定資料包的位元組數大小,預設是56,當和8位元組的ICMP頭合并時被轉換成64位元組的ICMP資料包。
-t ttl:設定IP包的生存時間為ttl秒。
-W timeout:設定等待回應的逾時時間。
ping的傳回資訊有"Request Timed Out"、"Destination Host Unreachable"和"Bad IP address",還有"Source quench received"。
"Request Timed Out"這個資訊表示對方主機可以到達到但是TIME OUT,這種情況通常是對方拒絕接收你發給它的資料包而造成資料包丢失。大多數的原因可能是對方裝有防火牆或已下線,也有可能是本機的IP不正确和網關設定錯誤。
(1)IP不正确:主要是IP位址設定錯誤或IP位址沖突,這可以利用ipconfig /all這指令來檢查。在Windows下IP沖突的情況很少發生,因為系統會自動檢測在網絡中是否有相同的IP位址并提醒你是否設定正确。在NT中不但會出現"request time out"這提示,有時還會出現"Hardware error"這提示,這個資訊比較特殊,不要被它的提示所迷惑。
(2)網關設定錯誤:網關設定錯誤主要是網關位址設定不正确或網關沒有幫你轉發資料,還有就是可能遠端網關失效。
注意Windows下面對方主機聯不上時(比如網絡連接配接有故障),也會提示Request Timed Out,而在Linux下面則都是"Destination Host Unreachable"。
"Destination Net Unreachable"這個資訊表示對方主機不存在或者沒有跟對方建立連接配接。這裡要說明一下"destination host unreachable"和"time out"的差別,如果所經過的路由器的路由表中具有到達目标的路由,而目标因為其它原因不可到達,這時候會出現"time out",如果路由表中連到達目标的路由都沒有,那就會出現"destination host unreachable"。
當你在開始PING網絡計算機時如果網絡裝置出錯它傳回資訊會提示"destination host unreachable"。如果區域網路中使用DHCP配置設定IP時,而碰巧DHCP失效,這時使用PING指令就會産生此錯誤。因為在DHCP失效時客戶機無法配置設定到IP系統隻有自設IP,它往往會設為不同子網的IP,是以會出現"Destination Host Unreachable"。另外子網路遮罩設定錯誤也會出現這錯誤。當然,網絡線未接好,也是重要的産生原因。還有一個比較特殊就是路由傳回錯誤資訊,它一般都會在"Destination Host Unreachable"前加上IP位址說明哪個路由不能到達目标主機。這說明你的機器與外部網絡連接配接沒有問題,但與某台主機連接配接存在問題。如:From 192.168.148.226 icmp_seq=50 Destination Host Unreachable。
"Bad IP address" 這個資訊表示你可能沒有連接配接到DNS伺服器是以無法解析這個IP位址,也可能是IP位址不存在。"Source quench received"資訊比較特殊,它出現的機率很少。它表示對方或中途的伺服器繁忙無法回應。