nDPI原始碼的一點分析

2021-06-26 06:36:53 字數 1057 閱讀 9811

ndpi是開源的深度包檢測庫,更詳細的介紹,請參考ndpi 官網:  。

每種應用層協議的檢測的流程:

ndpi_detection_process_packet -> check_ndpi_flow_func -> check_ndpi_tcp_flow_func(check_ndpi_udp_flow_func或check_ndpi_other_flow_func) -> ndpi_struct->callback_buffer_tcp_payload[a].func(ndpi_struct, flow)  

ndpi_struct->callback_buffer_tcp_payload[a].func(ndpi_struct, flow)  就到了每個具體的協議檢測,比如ndpi_search_http_tcp。

這裡的賦值是通過呼叫ndpi_set_bitmask_protocol_detection給func賦值的。具體流程如下:

setupdetection -> ndpi_set_protocol_detection_bitmask2  ->  ndpi_set_bitmask_protocol_detection 

pcapreader的流程:

processing_thread -> runpcaploop -> pcap_packet_callback -> packet_processing 

flow的獲取:

在packet_processing 獲取得到的,

flow = get_ndpi_flow

ndpi_flow = flow->ndpi_flow

同一條流的判斷:源位址,目的位址,源埠,目的埠,協議型別

idx = (lower_ip + upper_ip + iph->protocol + lower_port + upper_port) % num_roots

每個包都會對應一條流,直至流的數量大於等於 200000000。

簡單的說,首先抓包,再從資料鏈路層開始解析,一直解析到傳輸層是tcp或是udp或是tcp和udp都不是,最後才到應用層,到應用層只能依靠埠,分析包的內容來提取特徵碼等等來判斷是何種協議型別。

遞迴函式的一點分析

1.主要目的 為了知道遞迴函式返回數值時的順序 2.實驗 使用最簡單的階乘來實驗 對遞迴函式的輸出順序的實驗 用到階乘 include include int main int n jiecheng int n return s 3.輸出結果 enter an integer 1 to 12 i w...

對我自己的一點分析總結

上大學也有 2年了,2年裡面,學到了很多東西,也失去了很多。昨天好好想了想我得將來 我問了我自己這麼幾個問題 一 我為什麼上大學?二 我上大學要達到什麼目標?三 我應該如何努力去達成那些目標?四 達成這些目標的過程中,那些是我的障礙?五 什麼是我想要的?六 我現在應該怎樣去準備?想起這些問題,真的感...

關於jsp亂碼的一點小分析

jsp頁面亂碼可能會出現在下面幾個地方 1 jsp頁面編碼 2 html頁面編碼 3 jsp文件編碼 4 資料庫編碼 5 瀏覽器的編碼問題 解決辦法 以utf 8為例 1 給jsp page標籤內部加上 pageencoding utf 8 給 內部加上request.setcharacterenc...