nDPI 開源的深度包檢測專案

2022-07-07 17:06:12 字數 2686 閱讀 5418

dpi是deep packet inspection的縮寫,全稱深度包檢測,是對資料報負載進行實時分析的一類技術的總稱,它的其中一種應用是對流量進行分類。

在網際網路發展的早期,每一種協議或者應用都和乙個埠關聯。比如當我們說80埠時,我們指的就是http協議。但是,埠和協議的關聯並不是強制性的,而只是大家約定的共識。後來,許多新出現的協議都沒有再和乙個固定的埠關聯,有的協議為了繞過防火牆的管控,會直接使用http協議來傳輸。對於網路的監控和管理來說,識別當前流量中有哪些應用和協議,從而採取進一步動作——記錄日誌或者阻斷連線——就變成了一件非常困難的事情。

為了識別流量的型別,dpi技術應運而生,它有三種基本的實現思路:

基於特徵的。這種方式主要是使用模式匹配來匹配協議中的關鍵字。比如,通過get/post關鍵字來匹配http協議。

基於語義的。這種方式主要是通過嘗試不同的協議規範來解碼資料報,從而確定它是哪一種協議。其中又可以分為不同層級,因為有些協議是借助其它協議來傳輸的。比如,許多p2p協議通常會使用http協議。

基於統計的。這種方式主要是針對加密資料,因為它能被觀測到的資訊只有資料報數、大小以及建立加密連線時的過程和引數。

基於特徵的實現不能很好地應對協議中有編碼的情況,從而造成漏報。基於統計的則有很高的誤報率。所以,ndpi採用的是基於語義的實現方式。

因為ndpi是在opendpi的基礎上開發的,所以有必要先介紹一下opendpi。

opendpi是少有的幾個開源dpi庫之一,使用的是c語言,現在已經沒有人維護。它由兩個部分組成:

核心部分。負責處理資料報,解析ip層、tcp/udp層,然後提取出ip位址、埠等基本資訊。

外掛程式部分。每個外掛程式就是乙個解碼器,負責解析對應的協議。

opendpi存在以下問題:

每一次檢測協議時,opendpi都會嘗試使用所有的解碼器來解碼,即使可以通過埠來猜測協議型別。

**並不是可重入的,因此在多執行緒的程式中使用會有些困難。

不支援從分析流量中提取元資料資訊。

不支援執行時配置。

ndpi是在opendpi**的基礎上修改的,它做出了兩個比較大的改動:

通過埠來猜測真實的協議。這個設計基於乙個前提,就是假設大部分協議仍然是和埠有關係的。當使用和埠關聯的協議解碼器解碼失敗時,才會像opendpi那樣嘗試所有其它的解碼器,直到解碼成功。

可以通過配置檔案宣告埠和協議以及關鍵字和協議之間的關係。解碼時優先使用埠或者關鍵字對應的解碼器。

ndpi的協議識別流程如下:

ndpi解碼資料報的3層、4層部分。

如果有註冊了和資料報協議、埠相對應的解碼器,首先嘗試使用這個解碼器。

如果沒有匹配,會嘗試使用已經註冊的和資料報協議(比如udp)相關的所有解碼器。當其中任何乙個解碼器失敗時,有兩種情況,要麼是真的失敗了,要麼是還需要更多的資料報。當資料報到來時,後一種情況會繼續嘗試解碼。

只有有任何乙個解碼器匹配了,協議識別就會結束。

通常來說,ndpi只要分析了前8個資料報,就能夠識別出協議型別。

從設計上來看,如果不能依靠埠猜測出真實的協議型別,效能開銷將會是比較大的。因為這時ndpi會像opendpi那樣嘗試每一種解碼器,依據的也僅僅是這些解碼器註冊的順序。

使用者可以通過配置檔案來宣告傳輸層協議、埠和協議的關係,配置檔案的格式如下:

host:"kataweb.it",host:"repubblica.it"@repubblica在上面的例子中,當傳輸層協議是tcp且埠是81或者8181時,『@』符號後面是「http」,就表示我們認為的最有可能的協議是http。下面host對應的行又宣告了特徵對應的子協議。當http中的host欄位匹配了「venere.com」時,我們就認為它有可能是venere協議,並交給對應的協議解碼器處理。

在官方的測試中,單核的處理效能能夠達到3.5mpps/8.85gbps。因此使用兩個核心就能夠處理10gbps的流量。

[1]l. deri, m. martinelli, t. bujlow和a. cardigliano, 《ndpi: open-source high-speed deep packet inspection》, 收入 2014 international wireless communications and mobile computing conference (iwcmc), 2014, 頁 617–622, doi: 10/ghmq3k.

[2]f. risso, m. baldi, o. morandi, a. baldini和p. monclus, 《lightweight, payload-based traffic classification: an experimental evaluation》, 收入 2008 ieee international conference on communications, beijing, china, 2008, 頁 5869–5875, doi: 10/dkftbj.

nDPI 開源的深度包檢測專案

dpi是deep packet inspection的縮寫,全稱深度包檢測,是對資料報負載進行實時分析的一類技術的總稱,它的其中一種應用是對流量進行分類。在網際網路發展的早期,每一種協議或者應用都和乙個埠關聯。比如當我們說80埠時,我們指的就是http協議。但是,埠和協議的關聯並不是強制性的,而只是...

深度包檢測

一項持續時間比張某還長的遺留研究。下面是它的開發研究簡介,細節很多,非研究者可以略去不看。gfw的tcp協議阻斷方式 特定情況下gfw還會偽造通訊,例如type2的繼發阻斷中傳送偽造的syn ack企圖劫持連線 為什麼功能沒有開發完全?再如gfw的郵件檢測模組對smtp協議的阻斷會先偽造對方傳送一條...

PyTorch開源物體檢測工具包

mmdetection是乙個基於pytorch的開源物體檢測工具包。該工具包採用模組化設計,支援多種流行的物體檢測和例項分割演算法,並且可以靈活地進行拓展,在速度和視訊記憶體消耗上也具有優勢。目前已經支援單階段檢測器如ssd retinanet fcos fsaf,兩階段檢測器如fasterr cn...