nfdump浅窥

想知道nfdump抓取分割session的方法,尤其是tcp session。
因为看到文档说不是按照syn fin这些来进行分割的,而是整合了相似的包们,形成一个flow。
简单看了看源代码。没有仔细看,可能有错,未来的我,别相信下面的文字!
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;
   }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,498评论 11 349
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 11,183评论 1 13
  • 五、Java 虚拟机 一、什么是Java虚拟机Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现...
    壹点零阅读 4,084评论 0 0
  • 最好的死亡处方 希望朋友们可以 先读完链接的文章 http://mp.weixin.qq.com/s/HW-UPz...
    郭威楷先生阅读 4,334评论 0 1
  • 春节前夕,我接到了朋友晓悦的电话,她要独自一人去丽江旅行,行程一周,并在遥远的丽江度过2016年的新年。电话那头,...
    晴空下的雨燕阅读 1,864评论 0 4

友情链接更多精彩内容