天天看點

從ping和ping6說起

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

繼續閱讀