在验证正确性的时候,时常要统计指定端口的流量,也就是frame length,这里是一个简单的PERL程序,将打印所有的端口流量,以及流量所占比例,可以在Linux系统下安装有tshark的环境下运行
#!/usr/bin/perl ########################################## ##input: ## trace file list ##output: ## ports traffic information ##require: ## tshark ##2014-03-24 HuiLi ########################################### use threads; use Term::ANSIColor; sub Tshark { if ( -f "/usr/bin/tshark" || -f "/usr/local/bin/tshark" || -f "/usr/sbin/tshark" ){ # print "OK, tshark exist !\n"; } else { print "Tshark not found, please install it first !\n"; exit; } } sub Get_pcap { my $pcap_path_file = shift; my $pcap_file; if($pcap_path_file =~ /.*\/(.*)/){ $pcap_file = $1; } else { $pcap_file = $pcap_path_file; } return $pcap_file; } sub Ports_traffic { my ($four_trace_file, $four_parser_pf) = @_; my %ports_traffic; my $ports; my $traffic; my $total_traffic; open $FOUR, "tshark -r $four_trace_file -T fields -e tcp.port -e frame.len |"; while(<$FOUR>){ if(/(\d+),(\d+)\s+(\d+)/){ $srcports = $1; $dstports = $2; $ports_traffic{$srcports} += $3; $ports_traffic{$dstports} += $3; $total_traffic += $3; } #($ports, $traffic) = split /\s+/, $_; #$ports_traffic{$ports} += $traffic; } close($FOUR); # print $total_traffic; foreach my $key (sort { $ports_traffic{$b} <=> $ports_traffic{$a} } keys %ports_traffic ){ my $traffic_rate = $ports_traffic{$key} * 100 / $total_traffic; print $four_parser_pf "$key : $ports_traffic{$key} => $traffic_rate% \n"; } } ############################################Main Function########################################## Tshark(); chomp(my $file_list = $ARGV[0]); print "Sorry, please run the script with a file list as ARGV !\n" and exit if !$file_list; print "Sorry, trace file list $file_list not found !\n" and exit if !-f $file_list; open my($PCAP), '<', $file_list; while (my $trace_file = <$PCAP>){ chomp($trace_file); my $pcap_file = Get_pcap($trace_file); my $parser_file = $pcap_file . ".ports_traffic"; unlink $parser_file if -f $parser_file; open my($PARSER), '>>', $parser_file; my $t17 = threads->create(\&Ports_traffic, $trace_file, $PARSER); $t17->join(); print color 'bold green'; print "About $trace_file, ports_traffic information saved in $parser_file \n"; print color 'reset'; } close($PARSER); close($PCAP);