一、概述
1.DPI(Deep packet inspection,深度報文解析)
所謂“深度”是和普通的報文分析層次相比較而言的,“普通報文檢測”僅分析IP包4 層下面的內容,包含源地址、目的地址、源port、目的port以及協議類型。而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.傳統的協議識別
基於port的協議識別
網絡中多種應用層協議能夠同一時候執行在同一台計算機的同一個 IP 地址上。因為 IP 地址與網絡應用程序的關系是一對多的關系,所以主機須要通過port號來區分不同的網絡服務。
對於port號的分配。有兩種主要的方式:
1)全局分配,即由一個公認的中央機構(LANA)統一進行分配。盡管這樣easy確定應用程序和port的相應關系,但不能適應大量且迅速變化的port使用環境。
2)本地分配,即動態分配。當某應用程序進程須要訪問網絡時,主機操作系統暫時為該進程分配一個本地唯一的port號。但本地分配方式使得其他主機無法獲知分配情況。無法建立通信。
Internet 同一時候採用上述兩種分配方式,將port分成兩部分:
1)保留port,以全局方式(IANA)進行分配。這樣每個標准的server應用程序都擁有一個或多個全局的公認port號。
2)還有一部分是自由port,以本地方式進行分配。當某應用程序想要通過網絡和遠地程序通信之前,它會首先申請自由port號與遠地程序通信。主機操作系統暫時為該進程分配一個本地唯一的port號。
下圖是經常使用的保留port。部分另一定的參考價值。

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



上面說的相對照較全的正則表達式,以下這張表相對來說比較經常使用的:
