李山松
(河北遠東通信系統工程有限公司 河北 石家莊 050200)
IP報文的一種簡便捕獲方法
李山松
(河北遠東通信系統工程有限公司 河北 石家莊 050200)
通過軟件編程,將網卡置于混雜工作模式,可以方便地捕獲IP層的數據報文。在數據捕獲過程中,網絡程序可以正常進行IP報文的收發,Socket套接字的工作不會受到影響。在此基礎之上,針對具體項目編程,可以實現IP數據的高效捕獲和分析,此方法已成功應用于GPS車輛管理系統的工程調試。在此項目中,此方法的運用,縮短了項目的調試周期,提高了工作效率。
IP報文 數據捕獲 混雜模式 簡便方法
以太網的使用越來越廣泛,眾多系統開始采用以太網方式進行開發,大量的數據通過網卡進行傳送。掌握網卡數據的捕獲方法,可以加速相關系統的調試速度,快速解決系統之間的互聯互通問題。要實現網卡數據的在線捕獲功能,首先要把網卡的工作模式設定到混雜模式。
混雜模式[1](Promiscuous Mode)是指一臺機器的網卡能夠接收所有經過它的數據流,而不論其目的地址是否是它。一般計算機網卡都工作在非混雜模式下,此時網卡只接受來自網絡端口的目的地址指向自己的數據。當網卡工作在混雜模式下時,網卡將來自接口的所有數據都捕獲并交給相應的驅動程序進行處理。
要進入混雜模式,可以參照流程圖進行編程,如圖1所示。

圖1 進入混雜模式流程圖
在將網卡置于混雜模式的過程中,需注意每次函數調用的返回值,及時進行錯誤處理。當完成以上操作后,就可以通過編寫代碼讀取網卡上傳輸的數據。
設置網卡為混雜模式后,就可以使用網絡數據的接收函數對網卡上傳輸的數據進行捕獲和處理,其流程如圖2所示。

圖2 數據捕獲和處理流程圖
網絡數據的接收函數原型[3]為:

s是上面創建的SOCK_RAW類型的套接字。
buf是用來存放數據的緩沖區。
len是buf緩沖區的長度。
flags是函數的調用方式。
from指向存放源地址的緩沖區。
fromlen是from緩沖區的長度。
通過調用本函數,可以將接收到的數據存入預先申請好的內存緩沖區。之后捕獲的數據可以在緩沖區內進行實時分析,也可以保存到數據文件內,供后續分析。
在進行某GPS車輛管理系統的調試時,為了確認GPS回送的數據是否正確,使用上述方法編寫了一個數據捕獲軟件,將此軟件運行于GPS接收服務器上,所有從GPS回傳的數據都將被此程序記錄。同時,捕獲軟件并沒有影響原有系統運行,原來運行于服務器上的服務端軟件也在正常處理數據。最后,通過對比服務端程序的統計結果和捕獲下的原始數據,實現了對系統的修正和優化。下面是程序的一些主要代碼,使用開源軟件Code::Blocks進行編譯。
5.1 Socket初始化[4]

本函數主要實現網絡套接字Socket運行環境的建立,進行相關環境的初始化。依據函數的返回值,可以判定初始化工作是否順利完成。
5.2 RAW套接字的創建

本操作的目的是創建一個RAW類型的套接字實例。創建實例的過程,將為套接字分配所需的內存。
5.3 本地IP的綁定

將創建的套接字與本地的網卡地址進行綁定。
5.4 將網卡置為混雜模式

通過使用SIO_RCVALL參數調用套接字的控制函數,將網卡的工作方式置為混雜模式。
5.5 數據的接收

通過recvfrom網絡數據接收函數,對流經網卡的所有數據進行接收。所接收到的數據被保存在程序申請的內存緩沖區內,以方便進行處理。在原程序中,接收到的GPS數據被進行了實時處理,并轉化為便于閱讀的文本格式存儲在計算機硬盤內。進行文本存儲時,每條記錄單獨成行,使用逗號或者制表符分割行內的數據域。這樣得到的數據可以直接導入EXCEL表格,方便進行篩選和統計。
5.6 捕獲到的數據及分析方法
下面是捕獲到的GPS終端發回的原始數據:

以上捕獲到的數據是基于IP層的,其結構可以表示為:DATA=[IP頭][IP數據]。
IP頭[5]可以用下面的結構體表示:

分析這個結構,主要關心2個參數,一個是sourceIPAddress,從這個參數可以看出數據是哪個GPS終端回傳的;另外一個參數是Protocol,從這個參數可以看出IP數據包里面封裝了哪種業務協議。知道了協議類型后,可以對數據進行更詳細的解讀。分析從GPS終端返回的原始數據可以知道,Protocol=06,說明GPS終端使用TCP協議進行數據收發。通過這樣一層層對數據進行剝離,可以得到GPS終端發送到服務器的所有信息。通過和服務器上服務端軟件記錄的信息進行對比,可以進一步確認故障點:是服務端軟件BUG?還是GPS終端本身發送的數據就有問題?在工程實施過程中,快速判明責任方可以加快問題的處理速度。
6.1 優點
這種數據捕獲方式的優點是使用方便,不需要額外添加硬件,不需要在計算機上加載底層驅動,對計算機上運行的原有程序沒有影響,可以方便地實現實時數據捕獲和分析。同時,捕獲和分析可以在一個程序上實現,制作成一個高度定制的捕獲分析軟件。
6.2 缺點
通過這種方式捕獲到的數據只能是IP層和IP層以上的,不能實現數據鏈路層的數據捕獲。如果有分析數據鏈路層的需求,可以使用WinPcap等第三方軟件實現[6],這些軟件一般需要在計算機上掛載自己的驅動程序,以實現底層數據的捕獲功能。
IP報文的捕獲方法有很多,這里介紹的是一種針對網絡層的數據捕獲程序的編寫方法。其核心技術是通過軟件設置,將網卡的工作模式設定為混雜模式來實現,這種IP報文的捕獲方法是一種低成本、可定制和易實現的IP報文捕獲方式,可以在一些沒有條件使用協議分析儀的場合發揮出其小、快和省的特點。
[1]郭華.IP數據包截獲原理的研究與實現[J].現代計算機(專業版),2009,4(305):94-95.
[2]尤文堅.利用RAW SOCKET捕獲網絡底層數據包的方法[J].廣西輕工業,2007,11(108):56-56.
[3]STEVENS W R.UNIX網絡編程[M].北京:人民郵電出版社,2010:187-187.
[4]QUINN B,SHUTE D.Windows Sockets網絡編程[M].北京:機械工業出版社,2012:89-92.
[5]羅軍舟,等.TCP/IP協議及網絡編程技術[M].北京:清華大學出版社,2004:20-22.
[6]STEVENS W R.TCP/IP詳解[M].北京:機械工業出版社, 2007:371-372.
A Simple Capture Method of IP Message
LI Shan-song
(Hebei Far-east Communications System Engineering Co.,Ltd,Shijiazhuang Hebei 050200,China)
The network adapter is put in promiscuous work mode by using software programming in order to easily capture the data message at the IP level.In the process of data capture,the network program can normally receive and send the IP message,the operation of Sockets are not affected.On this basis,aiming at the specific project programming,the high effective capture and analysis of IP data can be implemented.This method is successfully applied to the engineering commissioning of GPS vehicle management system.In this project,the application of this method shortens the debugging cycle of project and improves the work efficiency.
IP message;data capture;promiscuous mode;simple method
TP311
A
1008-1739(2015)02-67-3
定稿日期:2014-12-26