說明:
程式目的:根據FG的traffic log 分析出每個IP的流量..
=============================
#!/usr/bin/perl
# @ip_array => 儲存所有的IP
# @flow_array => 儲存所有IP的流量
@ip_array;
@flow_array;
# $num_index => 記錄IP的筆數
$num_index=0;
# $ip_flag => 用來避免程式執行的旗標
$ip_flag=0;
# 載入開起./traffic.log檔案,
# 將內容根據每行儲成陣列格式,
# 最後關閉檔案。
$file = './traffic.log';
open(INFO, $file);
@lines =
close(INFO);
# 將檔案的每筆資料,進行處理..
foreach $data(@lines) {
if($data == "") {next;}
@tmp0 = split(' ',$data); # 將把ㄧ大筆log 根據空白分隔出所要的IP欄位以及flow欄位
@tmp1 = split('=',$tmp0[16]); # 再將IP欄位 分隔取出 最後的IP Address
@tmp2 = split('=',$tmp0[22]); # 再將flow欄位 分隔取出 最後的flow bytes
$ip = $tmp1[1];
$flow = $tmp2[1];
$ip_flag = 0;
# 判斷IP是否已出現過,如果已有出現過,則將封包流量加到 @flow_arrary
for($i=0;$i
if ($ip eq $ip_array[$i]) {
$ip_flag = 1;
$flow_array[$i] = $flow_array[$i] + $flow;
last;
}
}
# 表示IP未出現過 把IP加到ip_array and flow 加到flow_array
if ($ip_flag == 0) {
$ip_array[$num_index] = $ip;
$flow_array[$num_index] = $flow;
$num_index++;
}
}
# 排序 ip_array 和 flow_array
for ($i=0;$i
for ($j=$num_index;$j>0;$j--) {
if ($flow_array[$j] > $flow_array[$j-1]) {
$tmp = $flow_array[$j];
$flow_array[$j] = $flow_array[$j-1];
$flow_array[$j-1] = $tmp;
$tmp = $ip_array[$j];
$ip_array[$j] = $ip_array[$j-1];
$ip_array[$j-1] = $tmp;
}
}
}
# 印出流量前十名的IP
for ($i=0;$i
print "$ip_array[$i] $flow_array[$i] \n";
}
by James Lin