DPI nDPI 開源的深度報文解析元件

2021-10-23 15:18:43 字數 2339 閱讀 5520

官方**:

/blob/dev/doc/ndpi_quickstartguide.pdf

ndpi 要求呼叫它的高層應用需要提前處理好報文的第二層,由 ndpi 處理第三層和以上的資料,如果使用者使用 ndpi 作為底層,那麼就有必要進行先協議切分,三層和以上的資料才能由 ndpi 處理。

ndpi 適合作為一些用於檢測流量並判斷流量屬於何種應用的高層應用程式的基礎,具有較好的移植性,現在有針對 linux、windows、mac 和 bsd 型別系統的支援,硬體架構上支援 x86,mips 和 arm。

ndpi 實現了兩層架構:核心庫用來處理資料報文,抽取基本資訊;解析器用外掛程式實現,用於解析報文檢測協議類別。

ndpi 一旦識別出報文協議就立即返回結果。

ndpi 支援對加密流量的解析。

ndpi 實現了執行緒安全。

ndpi 實現了優化匹配的方式:ndpi 根據埠嘗試直接用一些有可能識別成功的協議解析器進行解析,如果猜錯了,則按註冊順序用其他解析器解析。比如乙個使用 22 埠的流,則嘗試先用 ssh 解析器解析。

ndpi 支援提取資料流的元資料。

ndpi 可以利用已經識別的 url 來判斷應用的功能:像那些會連線到固定伺服器的應用,比如 qq 等,這樣一來對流的識別效率會有一定程度的提高。針對某些網際網路應用,比如 dropbox,由於應用會連線到具體的伺服器上,比如 *.dropbox.com,通過解析 http 頭抽取 host 字段,如果這個欄位的內容和預先設定的 url 匹配,就可以初步判斷為流屬於 dropbox。

高層應用把

三、四層的資料交給 ndpi。

ndpi 根據預設埠和承載協議嘗試猜應用協議,並使用猜出來的協議解析器嘗試解析,如果解析成功,返回結果;如果不成功,就下一步。

根據承載協議使用該承載協議分類下的全部協議解析器按順序嘗試解析,比如:流是基於 tcp,就用和 tcp 有關的解析器解析,而不會考慮 udp 的。如果成功,返回結果;不成功,就下一步。

上一步不成功的原因可能是協議不被支援或者沒有抓到關鍵的包,如果協議不被支援就會停止解析,如果是後面一種情況就繼續等待高層應用提供新的資料。出現這種情況的主要原因是流開始了但沒有抓到前面的關鍵的包,從而導致識別失敗。

但是這裡有個問題,怎樣才知道哪些包重要,哪些不重要,不然讓高層應用怎麼抓?

流使用不同的承載協議還有某些軟體在開始傳輸資料之前會進行協商或者其他的處理,這些都是可以作為參照的流量特徵。參考 libprotoident,它用來進行識別的包都是雙向流的前面的包,一般而言,用雙向流整個週期(流的開始到結束)前面的包來進行識別成功率會更高。

影響 dpi 引擎的效能的因素主要是支援的協議數量和流的元資料的抽取,因為在識別流程中,ndpi 先根據埠或者 url 猜可能的協議種類並用對應的解析器嘗試解析,如果猜不對就按照解析器的註冊順序解析直到有乙個解析成功;另外對於某些流有很多特徵元資料的話,抽取特徵也是個很耗時的工作。

ndpi 的設計中,每個解析器都會包含乙個預設的協議和埠。比如乙個 tcp 流使用 80 埠的話,ndpi 就會嘗試猜應用層協議,並嘗試使用 http 解析器解析,如果正好猜對,就能讓整個解析過程變得更快,如果猜錯,比如 http 流不用 80 埠,才會交給其他解析器處理。

ndpi 針對加密流量一般是兩種方法:

通過 url 識別應用類別:不過預設情況下這個僅對網際網路應用有效,常見的網際網路應用都會連線到其官方伺服器,提前註冊了這些伺服器的 url,如果加密流量與這些 url 有關,就判斷流屬於與那些 url 相關的應用。

發現自簽名的 ssl 證書:如果是 vpn 應用,通常使用了自簽名的證書而且保持長時間連線,而非像 https 一樣只傳送少量資料。這部分的流識別只能靠行為識別。

ndpi 支援在執行時自定義協議解析器。使用的時候,需要按照一定的格式寫配置檔案,這些配置檔案主要起到儲存特徵的作用,比如定義乙個基於 tcp,使用 81 埠的流為 http,那麼 ndpi 就會從流中提取出某些有用的元資料,通過 aho-corasick 演算法進行快速匹配,如果匹配成功,就可以認為這個流使用了 http。

完成後,鍵入 ndpireader 就可以看到幫助資訊。嘗試使用 ndpireader 抓 eth0 的包持續 30 秒:

cd ndpi/example

./ndpireader --help

ndpireader -i eth0 -s 30

基於開源,強於開源,輕舟微服務解決方案深度解讀

2018年7月31日,由杭州市 賽迪以及網易主辦的 2018中國杭州雲創大會 於杭州國際博覽中心如期舉辦,大會以 開放 生態 賦能 為主題,匯聚行業領袖 技術大咖及產業鏈從業者。隨著數字經濟的時代到來,企業數位化創新對新一代雲計算服務的需求日漸迫切。在下午的雲計算專題會中,網易雲邀請了來自各行業的新...

nDPI 開源的深度包檢測專案

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

nDPI 開源的深度包檢測專案

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