Network Real Trace Analysis 2015年12月10日

了解网络中真实的流量,国内很难找到巨人的肩膀。

WAND是新西兰waikato 大学计算机系的研究小组,主要做网络测量,大规模网络流量捕获,网络分析。还做专业的分析软件。

libtrace是其开源的分析软件项目。

它可以读写流量。这些流量也放在他们网站上提供下载。

libtrace 有大量的可执行程序,在linux下编译运行。 例如,流统计报告tracereport.

  • traceanon
  • traceconvert
  • tracediff
  • traceends
  • tracefilter
  • tracemerge
  • tracepktdump
  • tracereplay
  • tracereport
  • tracertstats
  • tracesplit
  • tracesplit_dir
  • tracestats
  • tracesummary
  • tracetop
  • tracetopends
  • ToolTricks

使用tracereport工具里的参数选项-F可以统计流数目。tracereport工具有如下子选项。

tracereport

    [ -f bpf | --filter=bpf ] 
    [ -e | --error ] 
    [ -F | --flow ] 
    [ -P | --protocol ] 
    [ -p | --port ] 
    [ -T | --tos ]
    [ -t | --ttl ] 
    [ -O | --tcpoptions ] 
    [ -o | --synoptions ] 
    [ -n | --nlp ] 
    [ -d | --direction ] 
    [ -C | --ecn ]
    [ -s | --tcpsegment ]

求trace1的流数量

linux# tracereport -F erf:trace1.erf.gz

.erf.gz是流的后缀名,进过.gz压缩,是erf的包数据格式。

主要算法由/libtrace/tools/tracereport/Flow_report.c/ flow_per_packet()函数完成

void flow_per_packet(struct libtrace_packet_t *packet)
{
    struct libtrace_ip *ip = trace_get_ip(packet);
    struct fivetuple_t ft;
    if (!ip)
        return;
    ft.ipa=ip->ip_src.s_addr;
    ft.ipb=ip->ip_dst.s_addr;
    ft.porta=trace_get_source_port(packet);
    ft.portb=trace_get_destination_port(packet);
    ft.prot = 0;

    if (!SET_CONTAINS(flowset,ft)) {
        SET_INSERT(flowset,ft);
        flow_count++;
    }
}

每读取一个包就会调用一次此函数。

结构体 libtrace_ip 表示数据包ip。

得到ip内容。

判断是否是已经出现过的流,否则flow_count++;

统计值就在flow_count里。

==========完=========

2015年12月10日

原文链接:http://www.pandaroll.cn/research/research1.html

原文地址:https://www.cnblogs.com/pandaroll/p/6736088.html