国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于WinCE的網(wǎng)絡嗅探器的設計與實現(xiàn)

2013-08-13 05:06胡昊南張治中
電視技術 2013年5期
關鍵詞:鏈路層驅(qū)動程序網(wǎng)卡

胡昊南,張治中

(重慶郵電大學通信網(wǎng)與測試技術重點實驗室,重慶 400065)

網(wǎng)絡嗅探器是利用共享式的網(wǎng)絡傳輸介質(zhì),能夠捕獲和解析來自數(shù)據(jù)鏈路層、網(wǎng)絡層和傳輸層等底層網(wǎng)絡數(shù)據(jù)包的工具。隨著網(wǎng)絡需求和網(wǎng)絡規(guī)模的日益增大,保持網(wǎng)絡的高性能運行難度增大,網(wǎng)絡嗅探器能夠監(jiān)測網(wǎng)絡的運行狀況,快速定位和解決網(wǎng)絡故障,保證網(wǎng)絡高速有效運行。由于嵌入式設備在網(wǎng)絡評估和監(jiān)測中得到了廣泛應用,在嵌入式系統(tǒng)中實現(xiàn)網(wǎng)絡數(shù)據(jù)包的捕獲和分析具有重要的意義[1-2]。

本文分析了Winpcap(Windows Packet Capture)庫函數(shù)的架構和網(wǎng)絡數(shù)據(jù)包的傳遞流程,研究了NDIS(Network Driver Interface Standard)網(wǎng)絡驅(qū)動程序與該實現(xiàn)方案的聯(lián)系,給出了一種基于WinCE嵌入式系統(tǒng)網(wǎng)絡嗅探器的設計和實現(xiàn)方案,該方案具有良好的兼容性和適用性,能夠滿足實際網(wǎng)絡監(jiān)測的要求[3-4]。

1 網(wǎng)絡嗅探器基本工作原理

1.1 網(wǎng)卡混雜模式

網(wǎng)卡混雜模式是網(wǎng)卡的一種特殊工作模式,在該工作模式下,網(wǎng)卡不對目的地址進行判斷,而直接將收到的所有數(shù)據(jù)包傳遞給上層進行處理[5]。必須將網(wǎng)卡置于混雜模式才能實現(xiàn)網(wǎng)絡嗅探器。

1.2 NDIS網(wǎng)絡驅(qū)動程序

NDIS是網(wǎng)絡驅(qū)動程序接口規(guī)范的簡稱。它橫跨數(shù)據(jù)鏈路層、網(wǎng)絡層和傳輸層,定義了網(wǎng)卡驅(qū)動程序與上層協(xié)議驅(qū)動程序之間的通信接口規(guī)范,屏蔽了底層物理硬件的不同所帶來的影響,使上層協(xié)議驅(qū)動程序可以和底層任何型號的網(wǎng)卡進行通信[6]。NDIS支持三種類型的驅(qū)動程序,分別為協(xié)議驅(qū)動程序、中間驅(qū)動程序和微端口驅(qū)動程序。

1.3 Winpcap移植

Winpcap是Windows平臺下一個免費為應用程序提供訪問網(wǎng)絡底層能力的系統(tǒng)。微軟為WinCE系統(tǒng)提供了開源的 PacketCE。PacketCE由 DRIVER,DLL和 SampleApp三個工程組成,其依賴關系如圖1所示。其中DRIVER工程是一個流驅(qū)動程序;DLL工程為上層應用程序提供流驅(qū)動程序的封裝接口;SampleApp是可參照的示例程序。目前最高版本的PacketCE不能直接在操作系統(tǒng)WinCE5.0中使用,因此需要修改源碼進行移植。

圖1 PacketCE結構圖

2 網(wǎng)絡嗅探器軟件結構設計

2.1 方案選擇

實現(xiàn)網(wǎng)絡嗅探器有兩種方案。一種方案是使用Windows Socket編程中的原始套接字。原始套接字和其他套接字的不同之處在于它可工作在網(wǎng)絡層或數(shù)據(jù)鏈路層,而其他類型的套接字只能工作在傳輸層,所以使用原始套接字能夠監(jiān)聽數(shù)據(jù)鏈路層的數(shù)據(jù)。但操作系統(tǒng)WinCE5.0中不支持使用原始套接字。

另一種方案是使用微軟提供的Winpcap函數(shù)庫,在WinCE中微軟提供的開源軟件PacketCE,因目前最高版本的PacketCE不能直接在操作系統(tǒng)WinCE5.0中使用,需自己搭建編譯環(huán)境、修改源碼對其進行移植。Winpcap的核心是NDIS中間驅(qū)動程序,與Windows Socket相比,NDIS具備更高的效率和功能擴展性。在Windows平臺下,使用NDIS是捕獲網(wǎng)絡數(shù)據(jù)包最好的方法[6]。

本文采用的是移植微軟提供的Winpcap函數(shù)庫的方案,即使用NDIS中間驅(qū)動程序?qū)崿F(xiàn)網(wǎng)絡嗅探器。

2.2 軟件整體架構設計

軟件部分主要由網(wǎng)卡驅(qū)動程序、NDIS網(wǎng)絡驅(qū)動程序、操作系統(tǒng)和應用程序組成。其結構模型如圖2所示。本系統(tǒng)所使用的網(wǎng)卡芯片型號為DM9000,嵌入式ARM芯片的型號為S3C2440。經(jīng)分析知DM9000驅(qū)動程序由網(wǎng)卡驅(qū)動程序和NDIS微端口驅(qū)動程序組成,PacketCE由NDIS中間驅(qū)動程序、NDIS協(xié)議驅(qū)動程序和DLL接口組成。

網(wǎng)卡驅(qū)動程序通過處理網(wǎng)卡寄存器維持網(wǎng)卡的正常工作。中間驅(qū)動程序為微端口驅(qū)動程序提供協(xié)議驅(qū)動程序接口,為協(xié)議驅(qū)動程序提供微端口驅(qū)動程序接口[7]。DLL接口向上層應用程序提供驅(qū)動程序接口。數(shù)據(jù)包的捕獲基于NDIS中間層驅(qū)動程序?qū)崿F(xiàn),并依據(jù)過濾準則實現(xiàn)數(shù)據(jù)包的接收過濾,向上層傳遞數(shù)據(jù)包。應用層程序進行過濾準則的設置和數(shù)據(jù)包的處理分析以及數(shù)據(jù)統(tǒng)計和結果顯示。

2.3 軟件模塊設計

系統(tǒng)采用了模塊化的設計方法,各模塊之間相互獨立,便于功能的修改和擴展,提高了系統(tǒng)的可移植性、可維護性和可升級性。其軟件模塊結構如圖3所示。

圖2 軟件結構模型

圖3 軟件模塊設計圖

各個模塊的的作用如下:

1)過濾模塊

設置過濾準則,可選擇性地接收網(wǎng)絡數(shù)據(jù)包,屏蔽不關心的數(shù)據(jù)包,減輕對數(shù)據(jù)包的分析處理負擔,提高系統(tǒng)的監(jiān)聽效率。

2)數(shù)據(jù)包捕獲模塊

數(shù)據(jù)包解析模塊的基礎,實現(xiàn)網(wǎng)絡數(shù)據(jù)包的捕獲。主要完成網(wǎng)卡信息列表的讀取、打開指定網(wǎng)卡、抓包的開始和停止功能。

3)數(shù)據(jù)包解析模塊

網(wǎng)絡嗅探器系統(tǒng)的核心是實現(xiàn)數(shù)據(jù)包協(xié)議的解碼并保存解碼后的信息。保存的信息包括數(shù)據(jù)包捕獲的時間、最高級協(xié)議類型、目的MAC地址和源MAC地址、目的IP地址和源IP地址、幀長度等信息。

4)控制模塊

控制整個系統(tǒng)的開始與停止,協(xié)調(diào)各個模塊之間的交互,完成對系統(tǒng)信息的設置,例如系統(tǒng)MAC地址、IP地址以及工作速率模式的設置。

5)顯示模塊

實現(xiàn)捕獲結果及測試過程附加信息的呈現(xiàn)。能夠顯示數(shù)據(jù)包解析模塊所保存的全部信息、接收的總包數(shù)量、測試起始時間和測試持續(xù)時間,并限制顯示的包詳細信息總數(shù),節(jié)省占用的內(nèi)存。

3 網(wǎng)絡嗅探器的關鍵技術與模塊

3.1 網(wǎng)絡數(shù)據(jù)包傳遞流程

為了確保所捕獲的網(wǎng)絡數(shù)據(jù)包信息的正確性,了解網(wǎng)絡數(shù)據(jù)包在系統(tǒng)中的傳遞流程,監(jiān)測網(wǎng)絡數(shù)據(jù)包在各個位置的信息正確性成為必要。本文主要分析了系統(tǒng)中網(wǎng)絡數(shù)據(jù)包從網(wǎng)卡驅(qū)動,流經(jīng)NDIS驅(qū)動程序,直至DLL接口的整個傳遞流程,如圖4所示。

圖4 網(wǎng)絡數(shù)據(jù)包傳遞過程圖

當網(wǎng)絡數(shù)據(jù)包到達網(wǎng)卡時,因初始化中斷,對網(wǎng)卡數(shù)據(jù)包的接收進行了監(jiān)控,所以首先調(diào)用網(wǎng)卡驅(qū)動層中的Dm9LookupRxBuffer()函數(shù),判斷是否有有效的網(wǎng)絡數(shù)據(jù)包到達,并且調(diào)用DeviceReadString()函數(shù)完成對網(wǎng)卡接收寄存器中的網(wǎng)絡數(shù)據(jù)包內(nèi)數(shù)據(jù)的讀取,然后調(diào)用NDIS微端口驅(qū)動層中負責與NDIS中間驅(qū)動層交互的Ndis-MIndicateReceivePacket()函數(shù),進而調(diào)用NDIS中間驅(qū)動層中的PacketRecieve()/ProtocalReceiveComplete()函數(shù),完成數(shù)據(jù)從網(wǎng)卡寄存器到內(nèi)核緩沖區(qū)的轉(zhuǎn)移。這里的內(nèi)存緩沖區(qū)是一個PNDIS_PACKET結構體類型的變量,該結構體類型是指向PNDIS_BUFFER結構體類型的一個鏈表。DLL接口向上層應用程序提供PackeRecievePacket()函數(shù),該函數(shù)調(diào)用NDIS協(xié)議驅(qū)動層的PKTRead()函數(shù),PKTRead()函數(shù)與PacketReceive()函數(shù)通過一個全局句柄進行交互,完成從內(nèi)核緩沖區(qū)的數(shù)據(jù)拷貝至用戶緩沖區(qū)的功能。

總結上述過程,當有網(wǎng)絡數(shù)據(jù)包到達網(wǎng)卡時,先將網(wǎng)卡接收寄存器中的數(shù)據(jù)包復制到內(nèi)核緩沖區(qū)中,然后通過上層調(diào)用,將內(nèi)核緩沖區(qū)中的數(shù)據(jù)拷貝到用戶緩沖區(qū)中,最后再交給應用程序加工提取出有用的信息。在實現(xiàn)過程中,可根據(jù)上述流程進一步分析驗證網(wǎng)絡數(shù)據(jù)包信息的正確性,定位網(wǎng)絡數(shù)據(jù)包信息錯誤的原因,對理解NDIS網(wǎng)絡驅(qū)動程序的工作流程具有指導意義。

3.2 網(wǎng)絡數(shù)據(jù)包的捕獲

通過PacketGetAdapterNames()函數(shù)獲取網(wǎng)卡列表信息,所有信息以字符串的形式存儲在字符數(shù)組中。選擇并打開已選擇的網(wǎng)卡接口,通過設置Packet結構體類型變量中緩存的大小、超時時間等信息,初始化接收參數(shù)設置。通過PacketRecievePacket()函數(shù)接收網(wǎng)絡數(shù)據(jù)包,網(wǎng)絡數(shù)據(jù)包的所有數(shù)據(jù)存儲在Packet結構體類型變量的參數(shù)Buffer中。其捕獲流程如圖5所示。

圖5 網(wǎng)絡數(shù)據(jù)包捕獲流程圖

3.3 網(wǎng)絡數(shù)據(jù)包的解析

利用NDIS中間驅(qū)動程序捕獲的數(shù)據(jù)包處在數(shù)據(jù)鏈路層,依次經(jīng)過了傳輸層、網(wǎng)絡層和數(shù)據(jù)鏈路層的封裝。因此,需要對所接收到的數(shù)據(jù)包進行進一步解析才能得到所需要的信息。本系統(tǒng)依次分析數(shù)據(jù)鏈路層、網(wǎng)絡層和傳輸層的部分關鍵信息,不分析應用層的信息。

在數(shù)據(jù)包解析過程中,根據(jù)各種協(xié)議數(shù)據(jù)包包頭的格式,讀取接收網(wǎng)絡數(shù)據(jù)包中相應位置的包頭,分析出該協(xié)議的各個字段值。在數(shù)據(jù)鏈路層信息解析過程中,首先根據(jù)以太網(wǎng)幀結構的協(xié)議類型字段判斷幀的類型,主要判斷的類型有ARP,RARP以及IP[8]。如果幀類型是IP,則需繼續(xù)根據(jù)IP數(shù)據(jù)報結構的協(xié)議類型字段判斷該數(shù)據(jù)報的傳輸層信息,主要判斷的類型是ICMP,IGMP,TCP以及UDP,再根據(jù)對應的包頭格式獲取有用的字段信息。

本系統(tǒng)中在接收的數(shù)據(jù)包信息前增加了20 byte的自定義信息(8 byte的幀接收時間信息、4 byte的Captured Portion Length信息、4 byte的Packet Original Length信息、2 byte的Bpf Header Length信息以及2 byte的邊緣對齊填充數(shù)據(jù)),可直接從該自定義信息中獲取所接收幀長度、幀接收時間的信息,需要考慮自定義信息對數(shù)據(jù)包解析過程所帶來的影響。網(wǎng)絡數(shù)據(jù)包解析顯示結果如圖6所示。

圖6 網(wǎng)絡嗅探器結果顯示圖(截圖)

3.4 PacketCE在WinCE系統(tǒng)中的移植

分析PacketCE中DRIVER工程的OpenClose.c和Packet.c的源碼可知,DRIVER是一個NDIS中間驅(qū)動程序,在本質(zhì)上是一個流驅(qū)動程序,所以在Platform Builder5.0軟件中搭建了PacketCE的編譯環(huán)境。

在動態(tài)鏈接庫被加載后,流接口驅(qū)動程序的入口函數(shù)會第一個被調(diào)用,入口函數(shù)主要完成硬件的初始化工作。該流接口驅(qū)動程序的入口函數(shù)DWORD PKT_Init()首先定義并初始化了NDIS_PROTOCOL_CHARACTERISTICS類型結構體變量ProtocalChar,然后通過調(diào)用Ndis-RegisterProtocol()函數(shù)完成了NDIS協(xié)議驅(qū)動程序的注冊。網(wǎng)卡驅(qū)動程序不僅完成了對DM9000網(wǎng)卡芯片的驅(qū)動,還完成了對NDIS微端口驅(qū)動程序的實現(xiàn)和注冊。

移植時需分析在DRIVER工程中會調(diào)用到的微端口驅(qū)動程序,然后在微端口驅(qū)動程序中增加適當?shù)暮瘮?shù)并注冊,防止引起異常;在中間驅(qū)動程序中修改版本號等信息,并根據(jù)數(shù)據(jù)包交互流程,在對應的函數(shù)中作出相應的修改,重新編譯生成Packet.dll和Winpcap.dll動態(tài)鏈接庫,加載至WinCE操作系統(tǒng)中,配置好環(huán)境后,應用程序便可直接調(diào)用Winpcap庫函數(shù)。

3.5 測試驗證

在PC機端運行的Wireshark抓包軟件和在WinCE嵌入式系統(tǒng)運行的網(wǎng)絡嗅探器同時監(jiān)測統(tǒng)計同一個實際網(wǎng)絡中的數(shù)據(jù)包信息,以Wireshark的統(tǒng)計數(shù)據(jù)作為實際測試環(huán)境數(shù)據(jù),將網(wǎng)絡嗅探器的接收包數(shù)量測試結果與其對比,計算出丟包率,結果如表1所示。

表1 測試驗證結果

從表中可得知,當發(fā)送包數(shù)量小于10000時,網(wǎng)絡嗅探器未出現(xiàn)丟包的情況。當發(fā)送包數(shù)量大于10000時,由于硬件CPU頻率和內(nèi)存大小的限制,導致出現(xiàn)輕微的丟包現(xiàn)象。未出現(xiàn)丟包情況時,Wireshark測試結果和網(wǎng)絡嗅探測試結果中對應編號的包協(xié)議類型、長度、源及目的MAC、源及目的IP均相同,所以該網(wǎng)絡嗅探器能夠基本滿足實際網(wǎng)絡中網(wǎng)絡數(shù)據(jù)包捕獲的正確性和性能要求。

4 結束語

網(wǎng)絡嗅探器是多個模塊組成的系統(tǒng),能夠監(jiān)測網(wǎng)絡運行狀況,是分析網(wǎng)絡性能、解決網(wǎng)絡故障的基礎。本文介紹了NDIS網(wǎng)絡驅(qū)動程序的基本結構,通過對NDIS驅(qū)動和Winpcap庫函數(shù)的分析,在WinCE嵌入式系統(tǒng)中實現(xiàn)了網(wǎng)絡嗅探器的功能,著重闡述了網(wǎng)路數(shù)據(jù)包的傳遞流程、軟件結構設計和Winpcap的移植。本方案可在保證獲取信息正確的前提下修改移植的庫函數(shù),在數(shù)據(jù)包前增加自定義信息,具有良好的結構性、擴展性和效率性,并能夠收發(fā)基于各層的各種協(xié)議數(shù)據(jù)包,接收獲取網(wǎng)絡中各層的信息。

[1]TANG Dongming,LI Juguang,LU Xianliang.Efficient packet capture on windows CE[C]//Proc.2nd International Conference on Intelligent Control and Information Processing.Harbin:IEEE Press,2011:110-114.

[2]SMITH M,LOGUINOV D.Enabling high-performance internet-wide measurements on windows[C]//Proc.11th International Conference on Passive and Active Measurement.Hammamet:IEEE Press,2001:686-693.

[3]宋雁輝.Widnows防火墻與網(wǎng)絡封包截獲技術[M].北京:電子工業(yè)出版社,2002.

[4]楊智君,馬駿驍,田地,等.基于NDIS的IP安全協(xié)議的研究與實現(xiàn)[J]. 計算機工程,2007,33(22):166-168.

[5]QADEER M A,ZAHID M,IQBAL A,et al.Network Traffic Analysis and Intrusion Detection using Packet Sniffer[C]//Proc.2010 Second International Conference on Communication Software and Networks.Singapore:IEEE Press,2010:313-317.

[6]HU Yin,LIN Pei.Reserch and implementation of packet classification based on NDIS intermediate layer under windows platform[C]//Proc.2011 International Symposium on Intelligence Information Processing and Trusted Computing.Wuhan,Hubei:IEEE Press,2011:157-160.

[7]WANG Xiaoling,ZHOU Gang.Defence design for ARP spoofing based on NDIS intermediate driver[C]//Proc.2012 International Conference on Computer Distributed Control and Intelligent Environmental Monitoring.Changsha,Hunan:IEEE Press,2012:218-220.

[8]TANENBAUM A S,WETHERALL D J.計算機網(wǎng)絡[M].5th ed. 北京:機械工業(yè)出版社,2011.

猜你喜歡
鏈路層驅(qū)動程序網(wǎng)卡
基于多空間內(nèi)存共享的數(shù)據(jù)鏈路層網(wǎng)絡包捕獲方法
一種基于PCI接口的1394B總線的設計與實現(xiàn)
Server 2016網(wǎng)卡組合模式
計算機硬件設備驅(qū)動程序分析
基于FPGA全功能MVB網(wǎng)絡從設備鏈路層IP核設計
挑戰(zhàn)Killer網(wǎng)卡Realtek網(wǎng)游專用Dragon網(wǎng)卡
IEEE 1394事務層接口的設計與實現(xiàn)
RHEL7 Network Teaming(網(wǎng)卡綁定)配置與測試
USB故障又一原因
妙用鼠標驅(qū)動