使用Ping命令,有時會出現(xiàn)一個奇怪的現(xiàn)象。Ping是Windows自帶的運行于命令行程序,它是TCP/IP環(huán)境下用于檢測網(wǎng)絡(luò)連接性、可到達(dá)性和名稱解析的疑難問題的主要命令。Ping最主要的用處就是檢測目標(biāo)主機是不是可連通,其實質(zhì)就是發(fā)送一個ICMP回顯請求報文給目的主機,并等待回顯的ICMP應(yīng)答,然后打印出回顯的報文。關(guān)于Ping命令的應(yīng)用不用本文詳細(xì)討論,在此指出一個不為人注意的細(xì)節(jié),提醒大家要特別注意。
在Windows2000/XP命令提示符狀態(tài)輸入ping 127.0.0.1回車,會出現(xiàn)回顯信息表示ping通了。有趣的是如果你輸入ping 127.0..1回車(注意不是127.0.0.1,中間少輸入一個0),同樣可以Ping通!Windows會自動在IP地址中填充上一個“0”,組成127.0.0.1,如圖所示(圖1)。

在Windows98/Me下執(zhí)行這個命令也是同樣結(jié)果!換個方式,在命令行下輸入命令:ping 127..0.1,同樣可以Ping通,系統(tǒng)還是會自動補充上一個“0”,變?yōu)橥暾男问?。之所以會這樣,是因為在使用Ping命令Ping某個IP地址時,可以省略IP地址中的空值即為“0”的部分,而使用“..”這種格式可以在其中自動加入空值,于是我們就可以省略其中的“0”了。
如果我們在命令行下分別輸入Ping 202.108.36.172(這是網(wǎng)易的IP地址)和Ping 202.108.036.172,其回顯的結(jié)果會不會是一樣的呢?開始我以為是一樣的,然而命令執(zhí)行后的結(jié)果大大出乎我的意料——與我想像的完全不一樣。在輸入Ping 202.108.36.172回車后顯示的結(jié)果一切正常,和我們預(yù)想的完全一樣。而Ping 202.108.036.172時在命令提示符窗口中顯示的竟然是在Ping另外一個IP地址:202.108.30.172(圖2)!

更有趣地是,如果你輸入Ping 202.108.044.172回車,此時在命令提示符窗口中顯示的是我們在Ping地址202.108.36.172(圖3)!

這是不是也很出乎預(yù)料?除了Windows系統(tǒng)以外,在FreeBSD上測試的結(jié)果也是一樣的。
為什么會這樣呢?這是因為系統(tǒng)將上述IP地址中的“036”當(dāng)成八進(jìn)制而非十進(jìn)制數(shù)字了,八進(jìn)制數(shù)值“036”轉(zhuǎn)換為十進(jìn)制正好是“30”(你可以用Windows自帶的計算器來驗算),所以系統(tǒng)才會以為我們要Ping的是202.108.30.172。在IP地址的十進(jìn)制數(shù)字前面加上0就表示這是八進(jìn)制數(shù),如果加上0x則表示這是十六進(jìn)制數(shù)值。我們可以驗證一下,在命令提示符下輸入Ping 0x7f.0.0.1,回車之后你會發(fā)現(xiàn)我們Ping的是127.0.0.1。因為0x7f正是十進(jìn)制數(shù)值127的十六進(jìn)制表示方式。再試試輸入Ping 0x7f.0..1,猜猜看會怎么樣?沒錯,這樣輸入Ping的還是127.0.0.1這個IP地址。
注意,在使用Ping命令Ping某IP地址時,在IP地址的四部分中只能有一部分可以采用八進(jìn)制或十六進(jìn)制才輸入,其余部分必須還得是十進(jìn)制數(shù)值,否則會出錯。比方說,你要是將IP地址202.108.36.172轉(zhuǎn)為八進(jìn)制0312.0154.044.0254,然后去Ping,系統(tǒng)會報告錯誤(圖4),同樣的,如果將點分十進(jìn)制IP地址的各個部分全部轉(zhuǎn)為十六進(jìn)制,然后去Ping系統(tǒng)也會報告出錯,無法Ping通。所以還是老老實實采用十進(jìn)制的IP地址去Ping的好。

以后大家在使用Ping命令時就要特別注意了,多一個“0”和少一個“0”有時是不一樣的。