Java之JPcap網路抓包與分析程式(支援多種協議分析,對初學網路者認識網路有很好幫助)【Z】...

liuchang0001發表於2010-12-29

此程式是利用JPcap包,抓取通過本地網路卡的資料幀,並分析各欄位的程式。

這是我的一個網路課程設計,具體介紹在下面的實習報告中詳細講述,並附有原始碼

不知道怎麼上傳檔案,所以直接貼上過來了。

 

目錄

第一章    設計目的、任務與要求

1.1 設計的目的 ------------------------------------3

1.2 設計的任務與要求 ------------------------------3

第二章   系統分析設計  

2.1  系統分析 --------------------------------------3

2.2  系統設計 --------------------------------------8

第三章   系統實現

   3.1  實現過程 --------------------------------------10

   3.2  採用技術 --------------------------------------11

   3.3  結果介面 --------------------------------------11

  3.4 結果分析 --------------------------------------16

第四章   心得體會 ------------------------------------- 18

參考文獻 --------------------------------------------19

附錄 ------------------------------------------------20

第一章    設計目的、任務與要求

1.1:設計的目的

     《計算機網路原理》課程是電腦科學與技術專業的重要專業課程之一。隨著計算機網路技術的迅速發展和在當今資訊社會中的廣泛應用,給《計算機網路》課程的教學提出了新的更高的要求。

計 算機網路原理課程設計的目的與任務是為了使學生在課程學習的同時,通過在一個計算機網路環境中的實際操作,鞏固《計算機網路原理》課堂教學所講授網路的基 本理論、基本概念和方法技術,對現代計算機網路的基本功能有一個初步的瞭解。為學生今後使用計算機網路的理論和方法,開發大型、複雜的整合系統,打下一個 堅實的基礎。

     1 . 2 設計的任務與要求

     本次實驗的要求在網路環境, 使用 程式語言 實現捕獲網路中的IP 資料包,解析資料包的內容,將結果顯示在標準輸出上,並同時寫入日誌檔案。

程式的具體要求如下:

     ①: 在標準輸出和日誌檔案中寫入捕獲的IP 包的版本、頭長度、服務型別、資料包總長度、資料包標識、分段標誌、分段偏移值、生存時間、上層協議型別、頭校驗和、源 IP 地址和目的 IP 地址等內容。

     ②:可擴充套件分析其他協議包。

第二章  系統分析設計

2.1:系統分析

實現網路抓包的方法有很多,下面介紹四種:

    ①:原始套接字

    套接字是網路應用程式設計介面。應用程式可以使用它進行網路通訊而不需要知道底層發生的細節。有時需要自己生成一些定製的資料包或者功能並希望繞開 Socket  提供的功能 , 原始套接字 ( Raw Socket)  滿足了這樣的要求。原始套接字能

夠生成自己的資料包文 包括報頭和資料包本身的內容。通過原始套接字 可以更加自如地控制 Windows  下的多種協議 而且能夠對網路底層的傳輸機制進行控制。可以用原始套接字來傳送和接收 IP  層以上的原始資料包 ICMP, TCP, UDP,  而且能夠對網路底層的傳輸機制進行控制。 Raw Socket  的作用主要有三個方面 : ( 1)  接收發向本機的 ICMP, IGMP  協議包 或者傳送這些協議包 ; ( 2)  接收發向本機的 IP  ; ( 3)  傳送自定義的 IP  包。

    ②: LibPca p

    可以從 http: / / ee. lbl. gov/  找到並下載 LibPcap,  它是一個廣泛應用的系統抓包庫。 LibPcap  是一種與系統無關 採用分組捕獲機制的分組捕獲函式庫 用於訪問資料鏈路層 它在不同的平臺上採用統一的程式設計介面 使用 LibPcap  編寫的程式可自由的跨平臺使用。同時 LibPcap  是一個獨立於系統介面的使用者級的抓包庫 它為底層網路監聽提供了可移植框架。它的應用包括網路統計集合、安全監聽、網路除錯等。

    ③: WinPca p

    可以從 http: / /winPcap. polito. it /  找到 WinPcap WinPcap LibPcap  Windows  版本 它是一個基於 Win32  的捕獲資料包和網路分析的體系結構 它包括一個核心級的包過濾器 一個底層的動態連結庫 ( Packet. dll) ,  一個高層並且與系統無關的庫 ( WPcap. dll,  基於 LibPcap0. 6. 2  版本 WinPcap  是整合於 Windows95, 98, ME, NT, 2000  XP  作業系統的裝置驅動程式 它可以從網路卡捕獲或者傳送原始資料 同時能夠過濾並且儲存資料包。開發 WinPcap  這個專案的目的在於為 Win32  應用程式提供訪問網路底層的能力。它提供了以下四項功能 :

( 1)  捕獲原始資料包 包括共享網路上各主機傳送 接收的以及相互之間交換的資料包 ;

( 2)  在資料包發往應用程式之前 按照自定義的規則將某些特殊的資料包過濾掉 ;

( 3)  在網路上傳送原始的資料包 ;

( 4)  收集網路通訊過程中的統計資訊。

    ④: JP ca p

可以從 http: / / netresearch. ics. uci. edu / kfujii / jpcap / doc /index. html  找到 JPcap JPcap  是一個能夠捕獲、傳送網路資料包的 Java  類庫包。這個包用到了 LibPcap  和原始套接字 API 。目前 JPcap  FreeBSD 3. x, Linux RedHat 6. 1, Solaris  MicrosoftWindows 2000 /XP  系統上已經做過測試 並且支援 Ethernet, IPv4, IPv6, ARP/RARP, TCP, UDP, ICMPv4  協議。 JPcap 是一個 Java  類集合 它為網路資料包的捕獲提供介面和系統支援。其最初版本是 2000  月釋出的 JPcap0. 01  此後幾經修改 2003  月釋出了最新的 JPcap0.4  版。

由於本程式採用Java 程式語言,所以使用第四種方法,即 JPca p 來實現抓包。

現在選定了抓包工具,我們還得分析一下所獲包的結構,只有弄清楚結構,才能很好的分析捕獲包。

我們知道,網路軟體是由多個協議層次組成的,在每一層裡面都有自己的資料封裝,以便實現每個層的功能。OSI 參考模型中定義了 7 層,從低到高分別是物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層。 TCP/IP 參考模型中定義得比較少:網際網路層(網路層)、傳輸層、應用層、主機至網路層(空白,可以理解為跟 OSI 模型一致)。而且我們知道,高層協議整個協議包是封裝到低層協議的資料段中的,所以整體是一個巢狀的結構,如下圖所示:

資料鏈路幀格式如下(以太幀):

網路層協議有IP ICMP ARP 等:

IP分為 IPv4 IPv6, 這裡介紹 IPv4

IPv4協議格式如下:

ICMP用於控制,每一種控制有獨特的格式,由於格式太多,這裡不介紹,詳情可參考 RFC792 - Internet Control Message Protocol

ARP協議格式如下:

傳輸層協議有TCP UDP

TCP協議格式如下:

UDP協議格式如下:

基於TCP 的應用層協議主要有 HTTP:

HTTP協議格式如下 ( 具體資料會不同,這裡供參考 )

①:HTTP 請求:

GET 請求:

POST請求:

②:HTTP 響應:

基於UDP 的應用層協議主要有 DNS:

DNS協議格式如下:

以上這些協議是本程式所能分析出來的,由於網路協議有上千種,不可能都去分析,所以其他的協議在此忽略。

既然找到抓包工具,弄清協議格式,現在就開始系統設計吧。

2.2:系統設計

環境搭建:

設計少不了的一項工作就是環境搭建,以下是環境搭建的步驟:

①:jre 安裝 ( 最好是最新版本—— jre6)

②:Myeclipse 或者 Eclipse 安裝

③: 下載並安裝winpcap (可以下載最新版本)

④: 配置Jpcap 路徑:這一步也是最重要的一步。具體路徑為,把 Jpcap 資料夾下 lib 資料夾裡的 Jpcap.dll 複製到 "C:\Program Files\Java\jre1.6.0_07\bin" 資料夾裡面(複製到你機器 JRE 資料夾放到 bin 資料夾裡面就可以了,其中 JRE 的版本一定要與 Eclipse 配置的版本一致),再把 Jpcap 資料夾下 lib 資料夾裡的 Jpcap.jar 複製到 "C:\Program Files\Java\jre1.6.0_07\lib\ext" 資料夾裡面(複製到你機器 JRE 資料夾 ->lib->ext 放到 ext 資料夾裡面就可以了)

⑤: 配置Eclipse JRE 環境,(一定需要),選擇 Window->preferences->Java->Installed JREs, Installed JREs 選擇框中選擇相應的 JRE 版本,點 Edit


選擇Add External JARs…, 選擇你的 Jpcap.jar 包( "C:\Program Files\Java\jre1.6.0_07\lib\ext" 資料夾裡),在 Finish 就配置全部完成了

    
    

     在本程式中,採用圖形化介面,根據使用者的相關配置進行抓包,具體過程參考下面實現過程。

第三章  系統實現

3.1:實現過程

當環境搭建好後,一起都會顯得很簡單了,這裡說一下原理,在安裝winpcap 時,其實就是利用第三方編寫好的程式,他們已經實現了底層和網路卡的互動,資料捕獲,並把資料封裝好,然後對上層使用者提供 API ,現在我們就利用他們提供的 API ,即 JPca p 來處理他們封裝好的資料。

所以在環境搭建中,必須安裝winpcap 和匯入 JPca p 庫函式。

下面是獲取包的幾個關鍵步驟:

①:獲得網路卡介面

通過呼叫JPca p 庫中 JpcapCaptor 的靜態方法 getDeviceList() 得到網路卡介面陣列。

 ②:獲得某個網路卡介面的連線

通過呼叫JPca p 庫中 JpcapCaptor 的靜態方法 openDevice() 得到某個網路卡介面的連線例項。

 ③:呼叫例項的processPacket() 開始抓包。

④:將抓獲的包交給例項的receivePacket() 方法進行分析處理。

以上就是整個抓包過程。

當然,在上面的那些方法中,都有一些特定的引數,上面沒有給出,這些引數都是用於配置抓包的,程式採用圖形化介面,所以這些引數可以在介面上根據使用者的選擇,然後傳入相應方法中,最終獲得使用者所需的資訊。

採用圖形化介面,要解決的一個問題就是介面的重新整理,通常是後臺程式執行,產生結果,介面中要及時顯現變化,即介面內容因後臺結果而變。

在這個前臺( 介面 ) 和後臺都要兼顧的前提下,必須使用執行緒來解決這個問題,介面是根據後臺而變的,所以可以為介面分配較高優先順序,當介面顯示內容不再變化,程式才會去執行較低優先順序的後臺抓包程式,而當抓包結果產生時,程式馬上又能呼叫較高優先順序的前臺程式顯示出來。 

至此,前臺和後臺都能兼顧執行。

這裡要說明的一點是,由於採用執行緒抓包,所以所抓獲的包不是連續通過網路卡的包,我們獲得的,只是某些時刻的包。

3.2:採用技術

①:JPca p 庫函式運用

②:Swing 元件運用

③:執行緒技術運用

④:托盤技術運用( 托盤圖示,用於圖形化介面,沒有抓包方面的知識 )

⑤:檔案操作技術運用( 分析結果儲存於檔案和檔案開啟 )

3.3:結果介面   

①:開始介面( 歡迎介面 )

②:選單選項

File選單:              Capture選單:   

Tool選單:    Help選單: 

  

③:網路卡資訊

④:配置抓包

⑤:開始抓包

⑥:儲存檔案 (自定義字尾為  .sto)

⑦:開啟以前儲存的檔案

點選開啟後,會在介面上顯示儲存的結果

⑧:相關連結

Wireshake 連結(本程式就是參考此程式的)

注:要連結此程式,必須安裝wireshake 於本地機器上,目錄為安裝預設目錄。

Check network card factory(網路卡廠商查詢 ) 連結

注:通過此連結,可跳轉到國外的一個查詢網站,輸入前3 16 進位制(即前 24 位二進位制)網路卡地址查詢。

相關文章