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

上一篇:MySQL把文件导入表中


下一篇:SpringMVC 表单验证