ping,不僅僅用於檢測源主機和目標主機的連通性

ping是最常用的網絡檢測命令,主要用來檢測源主機和目標主機的連通性,但ping命令的作用遠不止於此。

1. ping命令的作用

  • ping(Packet Internet Groper)命令用於驗證源主機和目標主機的連通性。
  • 定量了解源主機和目標主機之間的網絡速度。
  • 根據域名得到IP地址。
  • 粗略判斷目標主機是Windows系列還是UNIX/Linux系列主機。
  • 修改個人主機TTL初始值,迷惑對方,增加對方攻擊自己主機的難度。
ping,不僅僅用於檢測源主機和目標主機的連通性

ping 源主機:回覆請求 目標主機:回覆回答

2. ping命令的輸入輸出

Windows、linux、unix都提供命令行的ping命令。格式類似:C>ping [可選參數] IP地址/域名。以ping新浪域名為例,如下圖。

ping,不僅僅用於檢測源主機和目標主機的連通性

ping 的輸入輸出

  • 源主機(本機)發送4個1024字節的數據包給目標主機(sina.com.cn),目標主機針對性返回了4個各1024字節的應答數據包,發送數據包和接收數據包沒有丟失,說明源主機和目標主機sina.com.cn連通性良好,如果丟包或者數據包往返行程時間較長,說明網絡狀態不好。
  • 請求開始到返回為止,每次往返行程都是4ms,平均值也是4秒,說明源主機和目標主機之間的連接很穩定,往返行程的用時反映了源主機和目標主機的網絡速度,用時越少,表示網絡速度越快。
  • 域名sina.com.cn,對應的IP地址為123.126.157.222
  • TTL為58,是目標主機返回報文中的TTL值,一定程度上說明目標主機組織應答報文,並將應答報文一步一步返回給源主機所經歷的網絡節點數量,藉此大致判斷目標主機是Linux主機,分析過程見下面的說明。

3. 關於TTL的說明

  • TTL(Time To Live)生存時間,是IP數據包的一個屬性,源主機發送數據包時設定TTL初值,數據包傳送過程中每經過一個路由器節點TTL減1(或減一個特定的值);當TTL為0時,當前路由器放棄該數據包,數據不可達。
  • TTL設置了放棄數據包的條件,經過一系列的步驟,仍然找不到目標主機時,就不再找了。設置跳數限制,防止了數據包在互聯網絡上永不停歇的找下一個節點。
  • 不同版本不同的操作系統都有對應的TTL默認值。TTL值過小,數據包沒有經過幾個網絡節點就被丟棄了,雖然源主機能很快的得到返回結果,但很多目標主機主機還沒有找到,通信過程完成率低。
  • TTL值過高,會導致一個報文在網絡中長時間尋找下一個節點,以期找到目標主機。這樣源主機長時間得不到回覆信息,並且很可能會浪費大量的網絡資源。
  • 不同的系統都提供TTL值的修改方法。針對windows系統,可以修改註冊表表項DefaultTTL。如下圖的目錄結構。這樣可以自主控制發送的數據包在網絡中傳送的長度(經歷的網絡節點數),同時也能干擾別有用心的人可能的對自己電腦的探測。本人在個人環境中測試win10家庭版和專業版,發現家庭版修改DefaultTTL後不起作用;專業版修改後有效。
ping,不僅僅用於檢測源主機和目標主機的連通性

通過註冊表,修改windows系統的TTL值

  • 默認情況下,Linux系統的TTL值為64或255,目前主流Windows操作系統的TTL值為128, UNIX主機的TTL值為255。
  • ping命令使用ICMP(Internet Control Message Protocol 網際控制報文協議)中“回送請求”和“回送回答”功能。
  • 請求報文由請求方填寫TTL值控制網絡傳送到目的地址之前可以經過的最多網絡節點數量。
  • 請求回答報文由回答方(目標主機)形成回答報文,報文中的TTL為回答方的初始值,用於控制回答報文達到請求方可以經歷的網絡節點的最大數量。
  • 目標主機TTL初始值和返回給源主機的TTL之差,一定程度上反映了該數據包經過的網絡節點(網段)的數量。
  • 如下圖,通過ping和tracert粗略估計目標主機的操作系統類型(不會完全準確)。
  • 針對ping的請求回答報文(目標主機的回覆),目標主機設置報文的TTL初始值,每經過一個網絡節點(路由器)TTL=TTL-1,當 TTL==57時報文傳回了源主機。使用tracert(unix中是traceroute)分析,從源主機到目標主機需要經過7個網絡節點(路由器),默認也認為從目標主機返回源主機也經過7個網絡節點;顧可以粗略判斷目標主機TTL初值-7=57,則目標主機的TTL=64,如果目標主機沒有人為修改TTL的默認值,則目標主機應該是LIUNX操作系統的主機。
ping,不僅僅用於檢測源主機和目標主機的連通性

通過ping和tracert初步判斷目標主機的TTL

  • 不同的操作系統的弱點或漏洞是不同的,入侵者對於不同的操作系統的攻擊方法也是不一樣的,如果我的主機win10主機,默認值TTL=128,但我修改TTL=255,探測方可能得到結論認為我是一臺unix主機,unix主機的攻擊難度比較大,也許就放棄攻擊了。通過給攻擊者一些迷惑信息,給主機的安全提供了多一些的保障。
  • 查看自己電腦的ttl值:ping 127.0.0.1 或者 ping 自己主機的ip地址。修改windows的TTL默認值後,必須重啟主機才有可能生效。

4. ping命令的用法

  • Windows系統中,ping –help可以列出ping命令的用法;linux和unix中,man ping可以列出ping的幫助文檔。
  • 下圖是windows中ping的幫助信息。其中 ping –l size 可以修改ping數據包的字節數,用來測試網絡性能;-r和-s選項,可以根據跟蹤躍點路由,結合tracert命令(對應unix是traceroute)對於瞭解網絡路徑有幫助。
ping,不僅僅用於檢測源主機和目標主機的連通性

windows 中 ping 命令的幫助信息

  • 下圖是使用 ping - l size 選項測試的baidu.com.cn 和 sina.com.cn. 對於組建的內網,可以使用該命令測試內網速度是否滿足要求,當然使用ftp文件跨主機傳送的方式比ping要好,ping也能反映出網絡速度的一些信息。
  • 可以看到sina.com.cn可以運行10240字節的ICMP數據包,baidu.com.cn用4096字節的數據包探測時,對方就拒絕了。
  • 所以很多主機、路由器、防火牆設置了ICMP數據包的過濾,ping命令使用ICMP報文,所以ping會超時。因為大量的ping實際是對目標主機的網絡攻擊。
ping,不僅僅用於檢測源主機和目標主機的連通性

大數據包的ping測試,頻繁的ping測試影響網絡影響主機

5. ping 常見的錯誤消息

ping不通主機也不能斷定主機不可達,因為很多主機和網絡過濾了ping命令使用ICMP協議,不準其他主機ping自己。

ping主機過程中常遇到“無法訪問主機”和“請求超時”的報錯信息,這是我們關注的重點;對於ping過程中出現參數錯誤問題、路由重定向問題,是系統的行為,我們不好干預。

  • 無法訪問目標主機。ping同一網段已經關閉的主機,或者同一網段不存在的主機,會返回無法訪問目標主機的提示;ping其他網段的主機,但沒有設置默認路由,ping的數據包找不到下一跳到哪兒去,也會出現無法訪問目標主機的信息。
ping,不僅僅用於檢測源主機和目標主機的連通性

ping 返回“無法訪問目標主機”的示例

  • 請求超時:ping其他網段的主機,目標主機已經關閉,或者對應IP地址的主機沒有掛載主機,請求會超時。
ping,不僅僅用於檢測源主機和目標主機的連通性

ping 其他網段已經關閉的主機,ping的ip地址沒有掛載實際主機,請求會超時

  • 請求超時:不同網段的目標主機存在,但必經鏈路中有一處可能設置了ICMP數據包過濾(比如防火牆設置),就會超時。例如ping蘋果中國官網,ping不通,但蘋果中國官網實際是可用的。
ping,不僅僅用於檢測源主機和目標主機的連通性

ping不通,ping請求超時,但實際可以訪問的站點

  • 請求超時:源主機網絡設置錯誤導致超時。例如有多塊網卡的主機,每塊網卡的IP地址應該處於不同的IP子網,否則源主機不知道將數據包發到哪個網絡接口,因為有兩個網絡接口都連接在同一網段,源主機也不知道用哪個地址作為數據包的源地址。因此,從這臺主機去Ping其他機器,IP層協議會無法處理,超時後,Ping 就會給出一個“超時無應答”的錯誤信息提示。
  • 參數問題:當路由器或目標主機收到的數據報的首部中有的字段值不正確時,就丟棄該數據報,並向源主機發送參數問題的報文。這種情況我們普通用戶不好干預。
  • 改變路由。路由器把改變路由報文發給主機,讓主機知道下次應該將報文發送給其他路由器,走其他路由器的路徑可能更好。這種情況屬於系統問題,我們普通用戶不好干預。


分享到:


相關文章: