nDPI-dev分析


目前在

分為兩個層次:其一是應用分析,學會如何使用;其二是原理分析,看懂它如何實現。

 

1. 打包該數據幀,搜集l3、l4層報頭信息

2. 查詢鏈接跟蹤(如果已被標識,則直接獲取到該數據幀所屬協議類型)
3. 從鏈接跟蹤中未獲取流量所屬協議類型,則進入深度報文分析過程

4. 率先進行協議猜測,調用相應的協議分析器分析

5. 猜測協議錯誤、此時ndpi會分類遍歷相關類型的協議分析器進行分析,直至分析出結果或遍歷完所有相關的協議分析器

6. 將分析出的協議類型標記到鏈接跟蹤中,以便下次可直接從連接跟蹤中拿到協議類型

 

ndpi_set_proto_defaults函數是設置每個協議號對應的屬性:協議標號,名稱,默認端口范圍,breed屬性分類,類型分類,是否有子協議

u_int16_t tcp_master_protoId[2], u_int16_t udp_master_protoId[2]   不知道什么用?

 

 

 

nDPI綜合了各種識別方式

IP list ASN分配的

默認端口范圍port

Host  URL關鍵字,模式匹配

開放了一個內容匹配的接口,但是未使用。

 

ndpi_guess_protocol_id() 針對flow提到的端口信息在默認端口協議樹中guess protocol id,體現在flow->guessed_protocol_id上。

ndpi_guess_host_protocol_id()針對flow的IP Layer在IP List中查找配置的協議號,體現在flow->guessed_host_protocol_id上。

guessed_category這個猜測根據什么,貌似目前沒用到。

guessed_header_category這個是來源ndpi_fill_ip_protocol_category()函數返回,是從IP划分的分類方式。

 

用戶自定義的端口識別優先級最高。

原則:

1. 如果根據端口guess猜測出來的協議號是自定義協議(用戶加載配置進來的),那么此時就直接判定該flow是此協議,返回的

ndpi_protocol.master_protocol = NDPI_PROTOCOL_UNKNOWN,

ndpi_protocol.app_protocol = flow->guessed_protocol_id

ndpi_protocol.category是該協議在加載時配置的分類

2. 如果端口guess出來的協議號是非自定義的,或者是unknown的,那么就用IP guess出來的判斷,如果Ip guess 出來的是自定義協議號,那么

3. tcp流最多判斷10條包,udp流最多判斷8條,就不再檢測。

 

一條流flow在什么時候停止繼續識別?

1. A TCP flow,whose first packet is NOT a SYN,no protocol has been detected,We don't see how future packets can match anything,hence we giveup here.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM