常孟佳
(江西科技學院,江西南昌 330108)
近年來互聯(lián)網技術得到了蓬勃的發(fā)展,而網絡作為信息交換的重要載體也被廣泛應用在各個領域。隨著網絡的接入,各種各樣的業(yè)務隨之產生,為了保證良好的網絡環(huán)境,社會對網絡監(jiān)管有了更高的要求。通過網絡監(jiān)聽來分析網絡環(huán)境,及時改進網絡環(huán)境并保證網絡環(huán)境的安全是目前研究的一大熱點。本文通過使用Jpcap[1,2]和Winpcap[3,4]技術設計一種網絡數(shù)據(jù)包的監(jiān)聽與分析方法,使其可以在數(shù)據(jù)鏈路層中進行對數(shù)據(jù)包的監(jiān)聽、捕獲、分析,實時監(jiān)測網絡狀態(tài)。
數(shù)據(jù)幀是數(shù)據(jù)鏈路層中的協(xié)議數(shù)據(jù)單元,它包含幀頭、數(shù)據(jù)部分、幀尾三個部分。其中幀頭是數(shù)據(jù)幀的開始部分它包含三個字段,前兩個字段包含了物理地址,各有6個字節(jié),第三個字段包含了16位以太網幀類型,例如IP數(shù)據(jù)包、ARP請求/應答等。幀頭后面緊接著數(shù)據(jù)部分,最后是幀尾。
數(shù)據(jù)包是TCP/IP協(xié)議通信的數(shù)據(jù)單元。TCP/IP協(xié)議通信采用了4層架構模式,分別是應用層、傳輸層、網絡層、數(shù)據(jù)鏈路層。數(shù)據(jù)包主要工作在網絡層中,主要由目的IP地址、源IP地址以及數(shù)據(jù)部分等構成,其中目的IP地址和源IP地址主要在包頭部分,數(shù)據(jù)部分在包體中。此外數(shù)據(jù)包中還包括MAC地址、協(xié)議類型端口號等細節(jié)。
計算都是通過網卡在網絡世界中進行收發(fā)數(shù)據(jù)的。因為以太網共享傳輸介質,在同一個沖突域中都可以接收到網絡傳輸中的數(shù)據(jù)幀,這個時候就需要網卡對數(shù)據(jù)幀進行相應的過濾,通過數(shù)據(jù)幀的目的MAC地址和網卡驅動程序相應的設置進行數(shù)據(jù)幀的過濾,選擇需要接收的數(shù)據(jù)幀接收。網卡的接收主要有四種模式:
(1)廣播模式:網絡中所有的廣播信息都能夠接收。
(2)組播模式:網卡能夠接收組播數(shù)據(jù),在一個組播組中,通過組內廣播的形式進行發(fā)送,只要在這個組播組中,都能接收到數(shù)據(jù)。若網卡為多播傳送模式,則可以接收所有的包含組內成員以外的多播傳送幀。
(3)單播模式:只接收目的MAC地址是自己的數(shù)據(jù)幀。
(4)混雜模式:能夠接收所有通過網卡的數(shù)據(jù)幀。網卡的缺省有廣播和單播兩種工作模式,只接收廣播幀和發(fā)送給自己的數(shù)據(jù)幀。網絡數(shù)據(jù)包的監(jiān)聽捕獲需要將網卡的工作模式設置為混雜模式,這樣網卡就可以接收到同一網絡中的所有數(shù)據(jù)包。
數(shù)據(jù)包捕獲技術[5-6]的應用十分廣泛。以太網從邏輯上分析是一種總線型的網絡拓撲結構,各個站點通過相應的硬件接口和電纜接入共享的總線。以太網中傳輸介質具有共享的特性,同時各個站點采用廣播信道爭用的方式監(jiān)聽系統(tǒng)并與正常通信的網絡保持并聯(lián)連接,從而捕獲在同一沖突域中的所有數(shù)據(jù)包,因此各個站點可以較為容易地獲得其他站點發(fā)送的數(shù)據(jù)。網絡數(shù)據(jù)包的捕獲需要將網卡設置為混雜模式的工作模式。
在TCP/IP四層架構中,一般數(shù)據(jù)包從底層的數(shù)據(jù)鏈路層逐層向上傳遞,依次經過網絡層和傳輸層,最終到應用層中相應的應用軟件。網絡數(shù)據(jù)包的捕獲是在數(shù)據(jù)包通過數(shù)據(jù)鏈路層時,將數(shù)據(jù)幀進行拷貝并將拷貝出的數(shù)據(jù)幀傳送給相應的程序進行處理。
網絡數(shù)據(jù)包的監(jiān)聽主要依靠Winpcap和Jpcap實現(xiàn)。由于核心的Java API不能訪問底層的網絡數(shù)據(jù),但Jpcap可以給Java語言提供在Windows或Unix系統(tǒng)上進行這種訪問。同時,Jpcap只是一個類庫,需要依賴本地系統(tǒng)庫的使用。所以在Windows系統(tǒng)上使用Jpcap時,需要先安裝Winpcap。
Winpcap是一個基于win32平臺提供win32應用程序訪問網絡底層能力的開源庫。Winpcap是免費的,提供了強大的編程接口,具有良好的可移植性。Winpcap用途十分廣泛,可以用于網絡分析、故障排除、網絡掃描等多個方面。
Winpcap中包括:內核級的包過濾器、底層的動態(tài)鏈路層、高層與系統(tǒng)無關的庫。數(shù)據(jù)包捕獲系統(tǒng)通過Winpcap提供的解決方案直接與網絡接口的驅動進行交互,用戶通過程序接口進行數(shù)據(jù)包的捕獲。
Jpcap是一個Java類庫包,為發(fā)送、捕獲網絡數(shù)據(jù)包提供了一個公共的Java接口,實現(xiàn)了平臺的無關性。Jpcap是一個類集合,本身并不能直接對數(shù)據(jù)鏈路層進行控制,它提供的只是接口和系統(tǒng)支持,因此需要基于Libpcap/Winpcap和原始套字節(jié)接口。Libpcap用于Unix系統(tǒng),Winpcap用于Windows系統(tǒng),本次實驗環(huán)境基于Windows系統(tǒng),所以在使用Jpcap之前需要先安裝Winpcap。
Jpcap提供以下的功能:(1)捕獲原始的數(shù)據(jù)包;(2)可以將捕獲到數(shù)據(jù)包存入本地文件;(3)根據(jù)自身提供的packet類集合中識別出相應的數(shù)據(jù)包類型,比如:TCP,UDP,ICMP等;(4)可以根據(jù)程序代碼指定過濾規(guī)則對數(shù)據(jù)包的進行過濾;(5)向網絡發(fā)送各類型的數(shù)據(jù)包。
Jpcap作為捕獲數(shù)據(jù)包的一種工具,不但對于各種操作平臺具有一定的通用性,而且對各種數(shù)據(jù)包的解析也十分方便。Jpcap類集合中有16個類,1個接口。其中關于數(shù)據(jù)包的類有 9個,分別是:ARPPacket、DtatlinkPacket、Ethernet-Packet、ICMPPacket、IPPacket、IPv6Packet、TCPPacket、UDPPacket、Packet,這也是Jpcap對網絡數(shù)據(jù)包支持的數(shù)據(jù)包類型。Jpcap還定義了大量的常量,為獲取和分析理解數(shù)據(jù)包帶來很大的便利,同時對數(shù)據(jù)包中的內部信息的理解也具有很大的幫助。Jpcap對數(shù)據(jù)包的捕獲和分析可以采用獨立的線程進行,這也對程序的優(yōu)化帶來了優(yōu)勢。
網絡數(shù)據(jù)包的監(jiān)聽[7]是通過使用Winpcap和Jpcap對網絡數(shù)據(jù)包的捕獲,使用Jpcap進行數(shù)據(jù)包的捕獲,具體如圖1所示。
圖1 網絡數(shù)據(jù)包的捕獲流程圖
開始使用JpcapCaptor類中的getDeviceList()獲取網卡列表,并將網卡列表存入networkinterface類提供的數(shù)組中,然后JpcapCaptor類中的openDevice()將網卡以混雜模式進行工作,獲得一個捕獲器,并進行數(shù)據(jù)包的捕獲。其中openDevice()中有四個重要的參數(shù),NetworkInterface interface,int snaplen,boolean promisc,int to_m。
NetworkInterface interface指的是需要打開連接的網卡實例;snaplen是指一次接收到的數(shù)據(jù)包,只提取該數(shù)據(jù)包中前多少個字節(jié);promisc判斷是否將網卡設置為混雜模式;to_m指定超時的時間。最后捕獲數(shù)據(jù)包,Jpcap中提供捕獲數(shù)據(jù)包的方法有四種,分別是getPacket()、LookPacket()、processPacket()和dispatchPacket()。getPacket()捕捉一個數(shù)據(jù)包;LookPacket()捕捉指定書目的數(shù)據(jù)包,并交由Packet-Receiver接口的類的實例進行處理;processPacket()跟loop-Packet()功能一樣,但是時限不同,前者超時后會自動返回捕捉到數(shù)據(jù)包的數(shù)目;dispatchPacket()跟processPacket()功能一樣,區(qū)別是這個方法可以處于“non-blocking”模式工作。
本實驗環(huán)境在Windows10操作系統(tǒng)中,開發(fā)環(huán)境是在JDK1.7下進行,具體實現(xiàn)結果如圖2和圖3所示。其中圖2中監(jiān)聽捕獲到的是UDP和TCP的網絡數(shù)據(jù)包,圖3中監(jiān)聽捕獲到的是ICMP網絡數(shù)據(jù)包。
根據(jù)圖2和圖3的結果,可以發(fā)現(xiàn)數(shù)據(jù)包顯示的信息并不多,如果想要獲取數(shù)據(jù)包更多相關的信息,就需要將捕獲到的數(shù)據(jù)包進行解碼分析。因為捕獲到的網絡數(shù)據(jù)都是經過層層封裝的,所以需要對網絡數(shù)據(jù)包進行解析,才能判斷網絡數(shù)據(jù)包的類型。對網絡數(shù)據(jù)包的分析主要是協(xié)議分析和流量分析。
圖2 TCP和UDP網絡數(shù)據(jù)包監(jiān)聽捕獲結果圖
圖3 ICMP網絡數(shù)據(jù)包監(jiān)聽捕獲結果圖
5.1.1 網絡協(xié)議分析設計
首先將網絡數(shù)據(jù)包解碼,然后分析網絡數(shù)據(jù)包的網絡協(xié)議,最后根據(jù)不同的網絡協(xié)議對網路數(shù)據(jù)做進一步的分析,獲取更多有用的信息,具體實現(xiàn)過程如圖4。網絡數(shù)據(jù)包是根據(jù)協(xié)議相關規(guī)則進行封裝的,因此提取數(shù)據(jù)包中的相關字節(jié)可以分析出對應的相關協(xié)議。根據(jù)提取出的字節(jié)對照表1中的相關協(xié)議號便可以找出數(shù)據(jù)包相關的協(xié)議。
表1 協(xié)議號--協(xié)議對照表
圖4 網絡數(shù)據(jù)報協(xié)議分析流程圖
首先得到網絡數(shù)據(jù)包中的相關協(xié)議,然后依照相關協(xié)議將數(shù)據(jù)包放入相關處理模塊,獲得更加詳細的信息,如數(shù)據(jù)包中的目的IP地址、源IP地址、數(shù)據(jù)包的大小等信息參數(shù)。具體設計中只選取了常用的ARP數(shù)據(jù)包、TCP數(shù)據(jù)包、UDP數(shù)據(jù)包、ICMP數(shù)據(jù)包進行處理。
5.1.2 數(shù)據(jù)包的流量分析設計
數(shù)據(jù)包的流量分析[8-10]是根據(jù)傳輸過程中數(shù)據(jù)包的來源和目標進行分析歸類,記錄網絡數(shù)據(jù)包中的重要參數(shù)信息。從根本上看,網絡數(shù)據(jù)包的數(shù)據(jù)流量分析功能依賴于網絡數(shù)據(jù)包捕獲技術和網絡數(shù)據(jù)包的解析功能。在實際的生活當中,可以利用網絡數(shù)據(jù)包流量對實時傳輸?shù)臄?shù)據(jù)包進行偵探檢測,分析其傳輸行為,從而了解網絡環(huán)境。
網絡數(shù)據(jù)包的歸類統(tǒng)計需要依靠網絡協(xié)議的分析結果,通過得到網絡數(shù)據(jù)包中的相關協(xié)議進行分類統(tǒng)計,同時根據(jù)協(xié)議對各種數(shù)據(jù)流量進行更深層次的統(tǒng)計計算,以便進一步分析所處的網絡環(huán)境。數(shù)據(jù)包的流量分析是對數(shù)據(jù)包進行實時連續(xù)的統(tǒng)計,通過統(tǒng)計得到的數(shù)值分析網絡狀態(tài)和網絡流量的變化趨勢,從而找出影響網絡的關鍵因素。
網絡數(shù)據(jù)包的流量分析設計首先要實時統(tǒng)計所經過網絡設備的網絡數(shù)據(jù)包總數(shù),再根據(jù)網絡協(xié)議分析的結果,對TCP、UDP、ICMP的數(shù)據(jù)包進行統(tǒng)計,計算出網絡環(huán)境中各種協(xié)議數(shù)據(jù)包所占比例。根據(jù)監(jiān)聽捕獲到的網絡數(shù)據(jù)包,選擇IP數(shù)據(jù)包判斷其中的源IP地址和目的IP地址,并對源IP地址和目的IP地址對向外發(fā)送的網絡數(shù)據(jù)包和接收的數(shù)據(jù)包進行統(tǒng)計,這樣就可以得到網絡數(shù)據(jù)包的進出流量值。還可以進一步地進行計算得出發(fā)送最多數(shù)據(jù)的目的地址和接收最多的源網絡IP地址,從而幫助分析網絡入侵檢測。
根據(jù)網絡數(shù)據(jù)的設計分析對TCP數(shù)據(jù)包的實現(xiàn)結果如圖5所示。圖6,圖7,圖8分別是UDP,ICMP和ARP網絡協(xié)議數(shù)據(jù)包的分析結果。另外同時對捕獲到IGMP協(xié)議的網絡數(shù)據(jù)包進行分析,結果如圖9所示。
圖5 TCP數(shù)據(jù)包分析結果
圖6 UDP數(shù)據(jù)包分析結果
圖7 ICMP數(shù)據(jù)包分析結果
圖8 ARP數(shù)據(jù)包分析結果
圖9 IGMP數(shù)據(jù)包分析結果
根據(jù)以上對數(shù)據(jù)包的分析結果,通過將數(shù)據(jù)包進行歸類統(tǒng)計和實時的流量分析,得到如圖10所示結果。由結果圖可知統(tǒng)計了300個數(shù)據(jù)包,進行流量分析得到TCP占所有數(shù)據(jù)包的82%,UDP數(shù)據(jù)包占所有數(shù)據(jù)包的18%,設備發(fā)送的數(shù)據(jù)包占51%,設備接收的數(shù)據(jù)包占49%。
圖10 數(shù)據(jù)包流量分析
本文介紹了網絡數(shù)據(jù)包的監(jiān)聽原理以及網絡數(shù)據(jù)包的相關技術Winpcap和Jpcap,并采用Java語言進行開發(fā)設計。使用Jpcap對數(shù)據(jù)包進行監(jiān)聽捕獲,將捕獲到的數(shù)據(jù)包進行解碼分析,其中重點對網絡數(shù)據(jù)包進行協(xié)議分析和流量分析。通過對網絡數(shù)據(jù)包的分析可以幫助我們了解網絡狀況,改善網絡環(huán)境。在未來的工作中,通過結合機器學習相關方法對網絡數(shù)據(jù)包進行入侵檢測分析,更好地保障網絡環(huán)境安全。