nfdump淺窺

想知道nfdump抓取分割session的方法,尤其是tcp session。
因為看到文檔說不是按照syn fin這些來進(jìn)行分割的,而是整合了相似的包們,形成一個flow。
簡單看了看源代碼。沒有仔細(xì)看,可能有錯,未來的我,別相信下面的文字!
nfcapd.c里

args的定義:

typedef struct p_packet_thread_args_s {
    // common thread info struct
    pthread_t tid;
    int done;
    int exit;

    // the parent
    pthread_t parent;

    // arguments
    NodeList_t *NodeList;  // push new nodes into this list
    pcap_dev_t *pcap_dev; 
    time_t t_win;
    int subdir_index;
    char *pcap_datadir;
    int live;
} p_packet_thread_args_t;

typedef struct p_flow_thread_args_s {
    // common thread info struct
    pthread_t tid;
    int done;
    int exit;

    // the parent
    pthread_t parent;

    // arguments
    NodeList_t *NodeList;        // pop new nodes from this list
    FlowSource_t *fs;
    time_t t_win;
    int subdir_index;
    int compress;
} p_flow_thread_args_t;

處理packet,Push_Node的位置:

__attribute__((noreturn)) static void *p_packet_thread(void *thread_data);

將packet整合為flow,Pop_Node的位置:

__attribute__((noreturn)) static void *p_flow_thread(void *thread_data) {

    t_start = 0;
    t_clock = 0;
    t_udp_flush = 0;
    while ( 1 ) {
        struct FlowNode * Node;
        Node = Pop_Node(args->NodeList, &args->done);
        if ( Node ) {
            t_clock = Node->t_last.tv_sec;
            dbg_printf("p_flow_thread() Next Node\n");
        } else {
            done = args->done;
            dbg_printf("p_flow_thread() NULL Node\n");
        }

        if ( t_start == 0 ) {
            t_udp_flush = t_start = t_clock - (t_clock % t_win);
        }
        if (((t_clock - t_start) >= t_win) || done) { /* rotate file */
            ......
            if(done)    
                break;
            t_start = t_clock - (t_clock % t_win);
        }
        if (((t_clock - t_udp_flush) >= 10) || !done) { /* flush inactive UDP list */   
            UDPexpire(fs, t_clock - 10 );  
            t_udp_flush = t_clock;
        }
    }
    while ( fs ) {   
        DisposeFile(fs->nffile);   
        fs = fs->next;
   }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,791評論 11 349
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 6,077評論 1 13
  • 五、Java 虛擬機(jī) 一、什么是Java虛擬機(jī)Java虛擬機(jī)是一個想象中的機(jī)器,在實際的計算機(jī)上通過軟件模擬來實現(xiàn)...
    壹點零閱讀 820評論 0 0
  • 最好的死亡處方 希望朋友們可以 先讀完鏈接的文章 http://mp.weixin.qq.com/s/HW-UPz...
    郭威楷先生閱讀 916評論 0 1
  • 春節(jié)前夕,我接到了朋友曉悅的電話,她要獨自一人去麗江旅行,行程一周,并在遙遠(yuǎn)的麗江度過2016年的新年。電話那頭,...
    晴空下的雨燕閱讀 302評論 0 4

友情鏈接更多精彩內(nèi)容