李山松
(河北遠東通信系統(tǒng)工程有限公司 河北 石家莊 050200)
IP報文的一種簡便捕獲方法
李山松
(河北遠東通信系統(tǒng)工程有限公司 河北 石家莊 050200)
通過軟件編程,將網(wǎng)卡置于混雜工作模式,可以方便地捕獲IP層的數(shù)據(jù)報文。在數(shù)據(jù)捕獲過程中,網(wǎng)絡(luò)程序可以正常進行IP報文的收發(fā),Socket套接字的工作不會受到影響。在此基礎(chǔ)之上,針對具體項目編程,可以實現(xiàn)IP數(shù)據(jù)的高效捕獲和分析,此方法已成功應(yīng)用于GPS車輛管理系統(tǒng)的工程調(diào)試。在此項目中,此方法的運用,縮短了項目的調(diào)試周期,提高了工作效率。
IP報文 數(shù)據(jù)捕獲 混雜模式 簡便方法
以太網(wǎng)的使用越來越廣泛,眾多系統(tǒng)開始采用以太網(wǎng)方式進行開發(fā),大量的數(shù)據(jù)通過網(wǎng)卡進行傳送。掌握網(wǎng)卡數(shù)據(jù)的捕獲方法,可以加速相關(guān)系統(tǒng)的調(diào)試速度,快速解決系統(tǒng)之間的互聯(lián)互通問題。要實現(xiàn)網(wǎng)卡數(shù)據(jù)的在線捕獲功能,首先要把網(wǎng)卡的工作模式設(shè)定到混雜模式。
混雜模式[1](Promiscuous Mode)是指一臺機器的網(wǎng)卡能夠接收所有經(jīng)過它的數(shù)據(jù)流,而不論其目的地址是否是它。一般計算機網(wǎng)卡都工作在非混雜模式下,此時網(wǎng)卡只接受來自網(wǎng)絡(luò)端口的目的地址指向自己的數(shù)據(jù)。當(dāng)網(wǎng)卡工作在混雜模式下時,網(wǎng)卡將來自接口的所有數(shù)據(jù)都捕獲并交給相應(yīng)的驅(qū)動程序進行處理。
要進入混雜模式,可以參照流程圖進行編程,如圖1所示。
圖1 進入混雜模式流程圖
在將網(wǎng)卡置于混雜模式的過程中,需注意每次函數(shù)調(diào)用的返回值,及時進行錯誤處理。當(dāng)完成以上操作后,就可以通過編寫代碼讀取網(wǎng)卡上傳輸?shù)臄?shù)據(jù)。
設(shè)置網(wǎng)卡為混雜模式后,就可以使用網(wǎng)絡(luò)數(shù)據(jù)的接收函數(shù)對網(wǎng)卡上傳輸?shù)臄?shù)據(jù)進行捕獲和處理,其流程如圖2所示。
圖2 數(shù)據(jù)捕獲和處理流程圖
網(wǎng)絡(luò)數(shù)據(jù)的接收函數(shù)原型[3]為:
s是上面創(chuàng)建的SOCK_RAW類型的套接字。
buf是用來存放數(shù)據(jù)的緩沖區(qū)。
len是buf緩沖區(qū)的長度。
flags是函數(shù)的調(diào)用方式。
from指向存放源地址的緩沖區(qū)。
fromlen是from緩沖區(qū)的長度。
通過調(diào)用本函數(shù),可以將接收到的數(shù)據(jù)存入預(yù)先申請好的內(nèi)存緩沖區(qū)。之后捕獲的數(shù)據(jù)可以在緩沖區(qū)內(nèi)進行實時分析,也可以保存到數(shù)據(jù)文件內(nèi),供后續(xù)分析。
在進行某GPS車輛管理系統(tǒng)的調(diào)試時,為了確認GPS回送的數(shù)據(jù)是否正確,使用上述方法編寫了一個數(shù)據(jù)捕獲軟件,將此軟件運行于GPS接收服務(wù)器上,所有從GPS回傳的數(shù)據(jù)都將被此程序記錄。同時,捕獲軟件并沒有影響原有系統(tǒng)運行,原來運行于服務(wù)器上的服務(wù)端軟件也在正常處理數(shù)據(jù)。最后,通過對比服務(wù)端程序的統(tǒng)計結(jié)果和捕獲下的原始數(shù)據(jù),實現(xiàn)了對系統(tǒng)的修正和優(yōu)化。下面是程序的一些主要代碼,使用開源軟件Code::Blocks進行編譯。
5.1 Socket初始化[4]
本函數(shù)主要實現(xiàn)網(wǎng)絡(luò)套接字Socket運行環(huán)境的建立,進行相關(guān)環(huán)境的初始化。依據(jù)函數(shù)的返回值,可以判定初始化工作是否順利完成。
5.2 RAW套接字的創(chuàng)建
本操作的目的是創(chuàng)建一個RAW類型的套接字實例。創(chuàng)建實例的過程,將為套接字分配所需的內(nèi)存。
5.3 本地IP的綁定
將創(chuàng)建的套接字與本地的網(wǎng)卡地址進行綁定。
5.4 將網(wǎng)卡置為混雜模式
通過使用SIO_RCVALL參數(shù)調(diào)用套接字的控制函數(shù),將網(wǎng)卡的工作方式置為混雜模式。
5.5 數(shù)據(jù)的接收
通過recvfrom網(wǎng)絡(luò)數(shù)據(jù)接收函數(shù),對流經(jīng)網(wǎng)卡的所有數(shù)據(jù)進行接收。所接收到的數(shù)據(jù)被保存在程序申請的內(nèi)存緩沖區(qū)內(nèi),以方便進行處理。在原程序中,接收到的GPS數(shù)據(jù)被進行了實時處理,并轉(zhuǎn)化為便于閱讀的文本格式存儲在計算機硬盤內(nèi)。進行文本存儲時,每條記錄單獨成行,使用逗號或者制表符分割行內(nèi)的數(shù)據(jù)域。這樣得到的數(shù)據(jù)可以直接導(dǎo)入EXCEL表格,方便進行篩選和統(tǒng)計。
5.6 捕獲到的數(shù)據(jù)及分析方法
下面是捕獲到的GPS終端發(fā)回的原始數(shù)據(jù):
以上捕獲到的數(shù)據(jù)是基于IP層的,其結(jié)構(gòu)可以表示為:DATA=[IP頭][IP數(shù)據(jù)]。
IP頭[5]可以用下面的結(jié)構(gòu)體表示:
分析這個結(jié)構(gòu),主要關(guān)心2個參數(shù),一個是sourceIPAddress,從這個參數(shù)可以看出數(shù)據(jù)是哪個GPS終端回傳的;另外一個參數(shù)是Protocol,從這個參數(shù)可以看出IP數(shù)據(jù)包里面封裝了哪種業(yè)務(wù)協(xié)議。知道了協(xié)議類型后,可以對數(shù)據(jù)進行更詳細的解讀。分析從GPS終端返回的原始數(shù)據(jù)可以知道,Protocol=06,說明GPS終端使用TCP協(xié)議進行數(shù)據(jù)收發(fā)。通過這樣一層層對數(shù)據(jù)進行剝離,可以得到GPS終端發(fā)送到服務(wù)器的所有信息。通過和服務(wù)器上服務(wù)端軟件記錄的信息進行對比,可以進一步確認故障點:是服務(wù)端軟件BUG?還是GPS終端本身發(fā)送的數(shù)據(jù)就有問題?在工程實施過程中,快速判明責(zé)任方可以加快問題的處理速度。
6.1 優(yōu)點
這種數(shù)據(jù)捕獲方式的優(yōu)點是使用方便,不需要額外添加硬件,不需要在計算機上加載底層驅(qū)動,對計算機上運行的原有程序沒有影響,可以方便地實現(xiàn)實時數(shù)據(jù)捕獲和分析。同時,捕獲和分析可以在一個程序上實現(xiàn),制作成一個高度定制的捕獲分析軟件。
6.2 缺點
通過這種方式捕獲到的數(shù)據(jù)只能是IP層和IP層以上的,不能實現(xiàn)數(shù)據(jù)鏈路層的數(shù)據(jù)捕獲。如果有分析數(shù)據(jù)鏈路層的需求,可以使用WinPcap等第三方軟件實現(xiàn)[6],這些軟件一般需要在計算機上掛載自己的驅(qū)動程序,以實現(xiàn)底層數(shù)據(jù)的捕獲功能。
IP報文的捕獲方法有很多,這里介紹的是一種針對網(wǎng)絡(luò)層的數(shù)據(jù)捕獲程序的編寫方法。其核心技術(shù)是通過軟件設(shè)置,將網(wǎng)卡的工作模式設(shè)定為混雜模式來實現(xiàn),這種IP報文的捕獲方法是一種低成本、可定制和易實現(xiàn)的IP報文捕獲方式,可以在一些沒有條件使用協(xié)議分析儀的場合發(fā)揮出其小、快和省的特點。
[1]郭華.IP數(shù)據(jù)包截獲原理的研究與實現(xiàn)[J].現(xiàn)代計算機(專業(yè)版),2009,4(305):94-95.
[2]尤文堅.利用RAW SOCKET捕獲網(wǎng)絡(luò)底層數(shù)據(jù)包的方法[J].廣西輕工業(yè),2007,11(108):56-56.
[3]STEVENS W R.UNIX網(wǎng)絡(luò)編程[M].北京:人民郵電出版社,2010:187-187.
[4]QUINN B,SHUTE D.Windows Sockets網(wǎng)絡(luò)編程[M].北京:機械工業(yè)出版社,2012:89-92.
[5]羅軍舟,等.TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù)[M].北京:清華大學(xué)出版社,2004:20-22.
[6]STEVENS W R.TCP/IP詳解[M].北京:機械工業(yè)出版社, 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