本發(fā)明涉及內(nèi)存領(lǐng)域,具體而言,涉及抓包方法及裝置。
背景技術(shù):
目前比較方便的傳統(tǒng)linux系統(tǒng)抓包命令是在內(nèi)核空間(Kernel Space)協(xié)議棧起始處進行抓包。另一種抓包方法是把linux服務器物理網(wǎng)卡連接到鏡像交換機,再利用鏡像交換機的數(shù)據(jù)包廣播功能,實現(xiàn)抓包。
運行DPDK(Data Plane Development Kit)的linux服務器的數(shù)據(jù)包轉(zhuǎn)發(fā)功能由DPDK接管,DPDK轉(zhuǎn)發(fā)數(shù)據(jù)包可能繞開內(nèi)核協(xié)議棧,直達網(wǎng)卡。從傳統(tǒng)的linux系統(tǒng)抓包原理,可以看出只有經(jīng)過內(nèi)核協(xié)議棧的數(shù)據(jù)包才能被抓取。而DPDK的誕生就是為了提高linux服務器數(shù)據(jù)包轉(zhuǎn)發(fā)效率,有選擇的有意繞開內(nèi)核協(xié)議棧。這就必然導致傳統(tǒng)的linux系統(tǒng)抓包方法不能抓取到經(jīng)過linux服務器系統(tǒng)網(wǎng)卡的全部數(shù)據(jù)包。另外DPDK可能會對原始報文進行修改,導致傳統(tǒng)抓包方法抓取到的包可能失真。
另一種外接鏡像交換機抓包的方法,需要購置鏡像交換機和一臺接收鏡像交換機廣播數(shù)據(jù)包的pc,增加了成本。在某些特定場合甚至無法做到。(運行DPDK的服務器一般是大型網(wǎng)絡的骨干節(jié)點,部署在保密安全要求很高電信機房,不方便隨意進出機房)。
由于DPDK技術(shù)的引入,導致傳統(tǒng)linux系統(tǒng)抓包命令失效或者失真,而外接鏡像交換機抓包又有使用場合的限制。
技術(shù)實現(xiàn)要素:
本發(fā)明提供了抓包方法及裝置,以至少解決現(xiàn)有技術(shù)中傳統(tǒng)linux系統(tǒng)抓包命令失效或者失真而外接鏡像交換機抓包又有使用場合的限制的問題。
根據(jù)本發(fā)明的一個方面,提供了一種抓包方法,包括:初始化網(wǎng)卡數(shù)據(jù)結(jié)構(gòu),根據(jù)獲取到規(guī)則和策略生成過濾規(guī)則;使用DPDK包捕獲函數(shù)返回的原始數(shù)據(jù)包的指針獲取數(shù)據(jù)包;將獲取到的數(shù)據(jù)包與所述過濾規(guī)則匹配,保存符合所述過濾規(guī)則的數(shù)據(jù)包。
進一步地,在使用所述DPDK包捕獲函數(shù)返回的原始數(shù)據(jù)包的指針獲取所述數(shù)據(jù)包之前,所述方法還包括:接收到用戶輸入的命令,其中,所述命令用于指示開始或停止獲取數(shù)據(jù)包;和/或,設(shè)置定時任務,其中,所述定時任務用于指示獲取數(shù)據(jù)包的時段。
進一步地,保存符合所述過濾規(guī)則的數(shù)據(jù)包包括:將符合所述過濾規(guī)則的數(shù)據(jù)包保存為預定格式的文件,并且存放在指定路徑下。
進一步地,保存符合所述過濾規(guī)則的數(shù)據(jù)包包括:如果符合所述過濾規(guī)則的數(shù)據(jù)包為IP數(shù)據(jù)包,則在計算校驗和之后,保存所述數(shù)據(jù)包。
進一步地,還包括:對于以文件形式保存的數(shù)據(jù)包,在所述文件超過預定的個數(shù)和/或大小的情況下,刪除部分或者全部已經(jīng)保存的數(shù)據(jù)包。
根據(jù)本發(fā)明的另一個方面,還提供了一種抓包裝置,包括:生成模塊,用于初始化網(wǎng)卡數(shù)據(jù)結(jié)構(gòu),根據(jù)獲取到規(guī)則和策略生成過濾規(guī)則;獲取模塊,用于使用DPDK包捕獲函數(shù)返回的原始數(shù)據(jù)包的指針獲取數(shù)據(jù)包;保存模塊,用于將獲取到的數(shù)據(jù)包與所述過濾規(guī)則匹配,保存符合所述過濾規(guī)則的數(shù)據(jù)包。
進一步地,還包括:接收模塊,用于接收到用戶輸入的命令,其中,所述命令用于指示開始或停止獲取數(shù)據(jù)包;和/或,設(shè)置模塊,用于設(shè)置定時任務,其中,所述定時任務用于指示獲取數(shù)據(jù)包的時段。
進一步地,所述保存模塊用于將符合所述過濾規(guī)則的數(shù)據(jù)包保存為預定格式的文件,并且存放在指定路徑下。
進一步地,所述保存模塊用于如果符合所述過濾規(guī)則的數(shù)據(jù)包為IP數(shù)據(jù)包,則在計算校驗和之后,保存所述數(shù)據(jù)包。
進一步地,還包括:刪除模塊,用于對于以文件形式保存的數(shù)據(jù)包,在所述文件超過預定的個數(shù)和/或大小的情況下,刪除部分或者全部已經(jīng)保存的數(shù)據(jù)包。
通過本發(fā)明,采用初始化網(wǎng)卡數(shù)據(jù)結(jié)構(gòu),根據(jù)獲取到規(guī)則和策略生成過濾規(guī)則;使用DPDK包捕獲函數(shù)返回的原始數(shù)據(jù)包的指針獲取數(shù)據(jù)包;將獲取到的數(shù)據(jù)包與所述過濾規(guī)則匹配,保存符合所述過濾規(guī)則的數(shù)據(jù)包,解決了現(xiàn)有技術(shù)中傳統(tǒng)linux系統(tǒng)抓包命令失效或者失真而外接鏡像交換機抓包又有使用場合的限制的問題,從而在不需要增加設(shè)備的情況下實現(xiàn)準確抓包。
附圖說明
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當限定。在附圖中:
圖1是根據(jù)本發(fā)明實施例的抓包方法的流程圖;
圖2是根據(jù)本發(fā)明實施例的DPDK對捕獲的數(shù)據(jù)包分析處理流程圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例;需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
在本實施例中,提供了一種抓包方法,圖1是根據(jù)本發(fā)明實施例的抓包方法的流程圖,如圖1所示,該方法包括如下步驟:
步驟S102,初始化網(wǎng)卡數(shù)據(jù)結(jié)構(gòu),根據(jù)獲取到規(guī)則和策略生成過濾規(guī)則;
步驟S104,使用DPDK包捕獲函數(shù)返回的原始數(shù)據(jù)包的指針獲取數(shù)據(jù)包;
步驟S106,將獲取到的數(shù)據(jù)包與過濾規(guī)則匹配,保存符合過濾規(guī)則的數(shù)據(jù)包。
通過上述步驟,直接使用DPDK包捕獲函數(shù)返回的原始數(shù)據(jù)包的指針,保存數(shù)據(jù)包,效率高,對服務器性能影響可忽略,抓到的數(shù)據(jù)包與原始包完全一樣,解決了現(xiàn)有技術(shù)中傳統(tǒng)linux系統(tǒng)抓包命令失效或者失真而外接鏡像交換機抓包又有使用場合的限制的問題,從而在不需要增加設(shè)備的情況下實現(xiàn)準確抓包。
在一個可選實施方式中,在使用DPDK包捕獲函數(shù)返回的原始數(shù)據(jù)包的指針獲取數(shù)據(jù)包之前,方法還包括:接收到用戶輸入的命令,其中,命令用于指示開始或停止獲取數(shù)據(jù)包;和/或,設(shè)置定時任務,其中,定時任務用于指示獲取數(shù)據(jù)包的時段。通過這兩種方式可以觸發(fā)開始抓包,當然也不限于此。
在一個可選實施方式中,保存的數(shù)據(jù)包可以以文件的方式保存,可以將符 合過濾規(guī)則的數(shù)據(jù)包保存為預定格式的文件,并且存放在指定路徑下。
在一個可選實施方式中,如果符合過濾規(guī)則的數(shù)據(jù)包為IP數(shù)據(jù)包,則在計算校驗和之后,保存數(shù)據(jù)包。
在一個可選實施方式中,考慮到空間的占用,對于以文件形式保存的數(shù)據(jù)包,在文件超過預定的個數(shù)和/或大小的情況下,刪除部分或者全部已經(jīng)保存的數(shù)據(jù)包。
在本實施例中還提供了一種抓包裝置,包括:生成模塊,用于初始化網(wǎng)卡數(shù)據(jù)結(jié)構(gòu),根據(jù)獲取到規(guī)則和策略生成過濾規(guī)則;獲取模塊,用于使用DPDK包捕獲函數(shù)返回的原始數(shù)據(jù)包的指針獲取數(shù)據(jù)包;保存模塊,用于將獲取到的數(shù)據(jù)包與過濾規(guī)則匹配,保存符合過濾規(guī)則的數(shù)據(jù)包。
在一個可選實施方式中,還包括:接收模塊,用于接收到用戶輸入的命令,其中,命令用于指示開始或停止獲取數(shù)據(jù)包;和/或,設(shè)置模塊,用于設(shè)置定時任務,其中,定時任務用于指示獲取數(shù)據(jù)包的時段。
在一個可選實施方式中,保存模塊用于將符合過濾規(guī)則的數(shù)據(jù)包保存為預定格式的文件,并且存放在指定路徑下。
在一個可選實施方式中,保存模塊用于如果符合過濾規(guī)則的數(shù)據(jù)包為IP數(shù)據(jù)包,則在計算校驗和之后,保存數(shù)據(jù)包。
在一個可選實施方式中,還包括:刪除模塊,用于對于以文件形式保存的數(shù)據(jù)包,在文件超過預定的個數(shù)和/或大小的情況下,刪除部分或者全部已經(jīng)保存的數(shù)據(jù)包。
下面結(jié)合優(yōu)選實施例進行說明,在本優(yōu)選實施例中,由于DPDK技術(shù)的引入,導致傳統(tǒng)linux系統(tǒng)抓包命令失效或者失真。而外接鏡像交換機抓包又有使用場合的限制。本實施例實現(xiàn)一種抓包機制,不需要外接鏡像交換機,與傳統(tǒng)linux系統(tǒng)的抓包功能無關(guān),就能直接抓取到經(jīng)過linux服務器系統(tǒng)網(wǎng)卡的全部數(shù)據(jù)包,不管數(shù)據(jù)包是否要經(jīng)過內(nèi)核協(xié)議棧。另外,本發(fā)明實現(xiàn)了傳統(tǒng)方法不具備的定時抓包功能,解決了無人值守時的抓包場景。在本實施例中在DPDK用戶空間進行抓包,并且,直接使用DPDK包捕獲函數(shù)返回的原始數(shù)據(jù)包的指針,保存數(shù)據(jù)包,效率高,對服務器性能影響可忽略。抓到的數(shù)據(jù)包與原始包完全一樣。在本優(yōu)選實施例中還增加了支持定時開啟和停止抓包功能。
例如,可以根據(jù)用戶輸入的命令或者根據(jù)定時任務觸發(fā)本發(fā)明的抓包功 能。進入設(shè)計好的處理流程:首先初始化網(wǎng)卡數(shù)據(jù)結(jié)構(gòu),再根據(jù)用戶輸入的規(guī)則和默認策略生成過濾規(guī)則bpf。然后通過dpdk技術(shù)獲取數(shù)據(jù)包,匹配過濾規(guī)則,將符合規(guī)則的數(shù)據(jù)包,按照wireshark文件的格式保存成文件,放到指定路徑下。如果數(shù)據(jù)包是ip數(shù)據(jù)包,需要計算校驗和。否則wireshark解析會錯誤,不方便人查看。由于長時間抓包生成的文件可能占滿硬盤空間,造成故障,需要將文件個數(shù)和大小加以限制。本發(fā)明自動維護抓取數(shù)據(jù)包文件的個數(shù),刪除最舊的文件。默認100個文件。每個文件大小20MB。當用戶輸入命令結(jié)束抓包,或者定時任務完成自動結(jié)束抓包。
下面結(jié)合兩個實例進行說明。
實例1:所有數(shù)據(jù)包都經(jīng)過linux內(nèi)核協(xié)議棧時,本實施例與傳統(tǒng)抓包方法的對比。
以抓取一個TCN1000系統(tǒng)(運行了DPDK關(guān)鍵技術(shù))語音呼叫信令和媒體流為例:
1)Telnet到本實施例程序的命令行端口,并運行抓包命令tcpdump,不帶過濾規(guī)則時,默認抓取所有網(wǎng)卡的所有數(shù)據(jù)包。也可以加上–starttime xx–endtime xx設(shè)置定時任務,待條件滿足時自動觸發(fā)抓包。
2)使用TCN1000系統(tǒng)已注冊好的LTE終端UE1拔叫系統(tǒng)下另一個LTE終端UE2的電話號碼,UE2振鈴顯示有新來電,UE2按接聽鍵接通呼叫。并進行一分鐘語音對話。通話完成后,UE2掛機釋放呼叫。
3)在本實施例程序的Telnet命令行端口,運行tcpdump–s命令停止抓包,停止抓包命令會提示抓包文件的保存位置,進入到指定位置,下載抓包文件,(為便于后面闡述,假定文件名為MyDump.pcap),即可用wireshark或者其它工具進行分析,也可以直接在linux系統(tǒng)進行打印分析。
為便于闡明本實施例與傳統(tǒng)linux系統(tǒng)抓包功能的區(qū)別,再次進行如下實驗:
1)不開啟本實施例的抓包功能,而是登錄到linux系統(tǒng),運行傳統(tǒng)的抓包命令tcpdump抓取所有網(wǎng)卡的所有數(shù)據(jù)包。
2)使用TCN1000系統(tǒng)已注冊好的LTE終端UE1拔叫系統(tǒng)下另一個LTE終端UE2的電話號碼,UE2振鈴顯示有新來電,UE2按接聽鍵接通呼叫。并進行一分鐘語音對話。通話完成后,UE2掛機釋放呼叫。
3)使用Ctrl+C結(jié)束tcpdump抓包,抓包即保存在當前目錄,下載抓包文件,假定文件名為LinuxDump.pcap。
分別用wireshark打開兩個文件(MyDump.pcap和LinuxDump.pcap),都輸入過濾條件“sip”,wireshark將過濾出本次抓包的信令流。都輸入過濾條件“rtp”,wireshark將過濾出本次抓包的媒體流。通過本實施例的抓包方法與傳統(tǒng)linux的抓包方法抓取到的數(shù)據(jù)包進行對比,就可以發(fā)現(xiàn),打開的兩個文件被wireshark解析出來的區(qū)別,MyDump.pcap文件被解析出來后,可以看到在udp協(xié)議的數(shù)據(jù)部分是GTP-U協(xié)議(SIP信令和rtp媒體流都放在GTP-U協(xié)議中)。LinuxDump.pcap文件被解析出來后,可以看到在udp協(xié)議的數(shù)據(jù)部分沒有GTP-U,直接就是應用層協(xié)議SIP和RTP。原因就是抓包位置不同造成的,MyDump.pcap文件是從eNodeB到linux服務器網(wǎng)卡的GTP-U包。經(jīng)過DPDK應用程序處理會剝離GTP-U協(xié)議相關(guān)頭部再把數(shù)據(jù)包遞交linux內(nèi)核TCP/IP協(xié)議棧,所以LinuxDump.pcap文件的包是經(jīng)過DPDK應用程序處理過的數(shù)據(jù)包。根據(jù)圖2可知,如果DPDK不把數(shù)據(jù)包遞交linux內(nèi)核TCP/IP協(xié)議?;蛘逥PDK過濾掉的數(shù)據(jù)包。傳統(tǒng)linux抓包方法將失效或者抓到的數(shù)據(jù)包并非原始包,而本發(fā)明的抓包方法仍然可以正常工作。
實例2:當DPDK直接轉(zhuǎn)發(fā)數(shù)據(jù)包,不經(jīng)過linux內(nèi)核協(xié)議棧時,本發(fā)明與傳統(tǒng)抓包的對比。
以抓取一個TCN1000系統(tǒng)(運行了DPDK關(guān)鍵技術(shù))從終端運行ping命令,目標地址為PDN網(wǎng)口所對接網(wǎng)絡IP地址為例:
1)Telnet到本發(fā)明程序的命令行端口,并運行抓包命令tcpdump,不帶過濾規(guī)則時,默認抓取所有網(wǎng)卡的所有數(shù)據(jù)包。也可以加上–starttime xx–endtime xx設(shè)置定時任務,待條件滿足時自動觸發(fā)抓包。
2)從注冊到TCN1000系統(tǒng)的LTE終端UE1運行ping命令,目標地址為PDN對接的網(wǎng)絡IP。
3)在本發(fā)明程序的Telnet命令行端口,運行tcpdump–s命令停止抓包,停止抓包命令會提示抓包文件的保存位置,進入到指定位置,下載抓包文件,(為便于后面闡述,假定文件名為MyDump.pcap),即可用wireshark或者其它工具進行分析。
使用傳統(tǒng)的linux抓包命令重復上述步驟。
(1)不開啟本發(fā)明的抓包功能,而是登錄到linux系統(tǒng),運行傳統(tǒng)的抓包命令tcpdump抓取所有網(wǎng)卡的所有數(shù)據(jù)包。
(2)從注冊到TCN1000系統(tǒng)的LTE終端UE1運行ping命令,目標地址為PDN對接的網(wǎng)絡IP。
(3)使用Ctrl+C結(jié)束tcpdump抓包,抓包即保存在當前目錄,下載抓包文件,假定文件名為LinuxDump.pcap。
分別用wireshark打開兩個文件(MyDump.pcap和LinuxDump.pcap),都輸入過濾條件“icmp”,可以發(fā)現(xiàn)LinuxDump.pcap文件中沒有ICMP報文,而MyDump.pcap文件中則有ICMP報文。原因為DPDK將此類報文直接從L2就轉(zhuǎn)發(fā)出去了,沒有經(jīng)過linux系統(tǒng)內(nèi)核協(xié)議棧。
通過上述實施例,登陸軟件的命令行端口,執(zhí)行tcpdump命令,輸入相應過濾規(guī)則,即可以得到符合規(guī)則的全部數(shù)據(jù)包,不管數(shù)據(jù)包是否經(jīng)過linux系統(tǒng)內(nèi)核協(xié)議棧。且抓到的數(shù)據(jù)包與原始包完全一樣。如果不熟悉tcpdump命令使用方法,還提供了幫助信息tcpdump-h。本實施例沒有新增任何附加設(shè)備,節(jié)約成本,并免除了許多不便,方便隨時使用,并且,在無人值守時,可以通過定時任務完成抓包。
本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
最后應說明的是:以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。