一、概述
1.DPI(Deep packet inspection,深度報文解析)
所謂“深度”是和普通的報文分析層次相比較而言的,“普通報文檢測”僅分析IP包4 層以下的內容,包括源地址、目的地址、源端口、目的端口以及協議類型,而DPI 除了對前面的層次分析外,還增加了應用層分析,識別各種應用及其內容,主要實現一下功能:
1)應用分析——網絡流量構成分析、性能分析、流向分析等;
2)用戶分析——用戶群區分、行為分析、終端分析、趨勢分析等;
3)網元分析——根據區域屬性(市、區、街道等)、基站負載情況進行分析等;
4)流量管控——P2P限速、保證QoS、帶寬保障、網絡資源優化等;
5)安全保障——DDoS攻擊、數據廣播風暴、防范惡意病毒攻擊等。
2.網絡應用的大致分類
現在的上的應用不計其數,但大眾常用的網絡應用可以進行窮舉。
據我的了解應用識別做的最好的就是華為,號稱能識別4000種應用。協議分析是很多防火牆公司(華為、網神、天融信、網康等)的基礎模塊,也是很重要的模塊,支撐着其他的功能模塊的實現,精准的應用識別,大大提高產品的性能和可靠性。像我現在在做的基於網絡流量特征識別惡意軟件的建模,精准的,大量的協議識別也是很重要的一環。公司出口的流量剔除掉常用應用的網絡流量,剩下的流量占比會很少,更好的進行惡意軟件的分析,報警。
根據我的經驗將現有常用的應用根據作用進行分類:
ps:根據個人對應用的理解進行應用分類,大家有什么好的建議歡迎留言提議
1、電子郵件類
2、視頻類
3、游戲類
4、辦公OA類
5、軟件更新類
6、金融類(銀行、支付寶)
7、股票類
8、社交通訊類(IM軟件)
9、Web瀏覽(借助url可能會更好的識別)
10、下載工具類(網盤、P2P下載、BT類相關)
P2P下載是很蛋疼的硬骨頭!
P2P下載相關:迅雷、Flashget-2.4/3.4、EasyMule-1.1.11、QQDownload、Vagaa-2.6.7.1、Baidu下吧-4.0.0.1
BT類相關:BitComet/BitTorrent、gnutella、KAZAA、directconnect、ARES、SOUL、WINMX、APPLE、DC、MUTE、XDCC、WASTE
BT類相關:BitComet/BitTorrent、gnutella、KAZAA、directconnect、ARES、SOUL、WINMX、APPLE、DC、MUTE、XDCC、WASTE
3.傳統的協議識別
基於端口的協議識別
網絡中多種應用層協議可以同時運行在同一台計算機的同一個 IP 地址上。由於 IP 地址與網絡應用程序的關系是一對多的關系,所以主機需要通過端口號來區分不同的網絡服務。
對於端口號的分配,有兩種基本的方式:
1)全局分配,即由一個公認的中央機構(LANA)統一進行分配。雖然這樣容易確定應用程序和端口的對應關系,但不能適應大量且迅速變化的端口使用環境;
2)本地分配,即動態分配。當某應用程序進程需要訪問網絡時,主機操作系統臨時為該進程分配一個本地唯一的端口號。但本地分配方式使得其它主機無法獲知分配情況,無法建立通信。
Internet 同時采用上述兩種分配方式,將端口分成兩部分:
1)保留端口,以全局方式(IANA)進行分配。這樣每一個標准的服務器應用程序都擁有一個或多個全局的公認端口號;
2)另一部分是自由端口,以本地方式進行分配。當某應用程序想要通過網絡和遠地程序通信之前,它會首先申請自由端口號與遠地程序通信,主機操作系統臨時為該進程分配一個本地唯一的端口號。
下圖是常用的保留端口,部分還有一定的參考價值。

傳統上一直是基於端口映射機制對應用層協議進行識別。隨着越來越多的網絡協議不使用固定的端口進行通信,基於報文端口的協議識別受到很大限制,准確性受到很大挑戰。但由於基於公知端口進行協議識別操作簡單,識別速度快,現在的帶寬越來越大,在識別 DNS、SMTP、POP3 等目前端口比較固定的傳統協議時依然有一定的價值。
基於測度的協議識別
基於測度的協議識別根據各協議產生的流測度的差異識別應用層協議。
基於測度識別協議無需分析報文體的內容,只要根據報文頭中的域值、報文大小、報文間隙等特征分析流量所屬的應用類型。例如,Web 瀏覽產生的流量一般為短流小報文,而各種 P2P 協議的流量一般為長流大報文。基於測度的協議識別一般采用機器學習的方式,利用已經按協議類型分類的報文來訓練系統,使其把握該類應用的流測度特征以識別新的流量。
溫超、鄭雪峰等提出通過網絡流量信息識別 P2P 協議。基於流量分析的 P2P協議識別方法,依據以下四個特征識別 P2P 協議:
1)P2P 主機的上下行流量基本相當;
2)P2P 主機連接的其它主機的數量較多;
3)P2P 主機既為服務器又為客戶端;
4)P2P主機的監聽端口的特點與其它協議不同。
雖然基於流量分析的識別方法只需對數據包的頭部信息進行檢測,不需要檢測數據包的負載,具有簡單、高效的特點。但是只能識別出網絡流量是否為 P2P 協議,無法識別出具體是哪種 P2P 協議或是哪種非 P2P 協議,具有應用的局限性。PS:有些p2p下載應用也是可以識別的,后續的文章可以分析一下試試。
基於負載的協議識別(基於正則表達式)
采用固定字符串的方式過於笨拙,在這不在做介紹,其實可以把它理解成基於正則表達式的子集。正則表達式比固定字符串具有更強的表達能力和更好的靈活性,采用正則表達式代替固定字符串表示協議的特征成為研究的熱點。
正則表達式:又稱正規表示法、常規表示法(
英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE)。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的
字符串。
正則表達式語法學習網站:http://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx


