一个强大的网络分析shell脚本分享(实时流量、连接统计)

2019-09-23 09:32:45王振洲

    fi
   
    awk '{len=$NF;sub(/)/,"",len);getline;print $0,len}' /tmp/tcpdump_temp2 > /tmp/tcpdump

    #统计每个端口在10s内的平均流量
    echo -e "33[32maverage traffic in 10s base on server port: 33[0m"
    awk -F'[ .:]+' -v regTcpdump=$regTcpdump '{if ($0 ~ regTcpdump){line="clients > "$8"."$9"."$10"."$11":"$12}else{line=$2"."$3"."$4"."$5":"$6" > clients"};sum[line]+=$NF*8/10}END{for (line in sum){printf "%s %dn",line,sum[line]}}' /tmp/tcpdump |
    sort -k 4 -nr | head -n 10 | while read a b c d;do
        echo "$a $b $c $(bit_to_human_readable $d)/s"
    done
    echo -ne "33[11A"
    echo -ne "33[50C"
    echo -e "33[32maverage traffic in 10s base on client port: 33[0m"
    awk -F'[ .:]+' -v regTcpdump=$regTcpdump '{if ($0 ~ regTcpdump){line=$2"."$3"."$4"."$5":"$6" > server"}else{line="server > "$8"."$9"."$10"."$11":"$12};sum[line]+=$NF*8/10}END{for (line in sum){printf "%s %dn",line,sum[line]}}' /tmp/tcpdump |
    sort -k 4 -nr | head -n 10 | while read a b c d;do
            echo -ne "33[50C"
            echo "$a $b $c $(bit_to_human_readable $d)/s"
    done  
       
    echo

    #统计在10s内占用带宽最大的前10个ip
    echo -e "33[32mtop 10 ip average traffic in 10s base on server: 33[0m"
    awk -F'[ .:]+' -v regTcpdump=$regTcpdump '{if ($0 ~ regTcpdump){line=$2"."$3"."$4"."$5" > "$8"."$9"."$10"."$11":"$12}else{line=$2"."$3"."$4"."$5":"$6" > "$8"."$9"."$10"."$11};sum[line]+=$NF*8/10}END{for (line in sum){printf "%s %dn",line,sum[line]}}' /tmp/tcpdump |
    sort -k 4 -nr | head -n 10 | while read a b c d;do
        echo "$a $b $c $(bit_to_human_readable $d)/s"
    done
    echo -ne "33[11A"
    echo -ne "33[50C"
    echo -e "33[32mtop 10 ip average traffic in 10s base on client: 33[0m"
    awk -F'[ .:]+' -v regTcpdump=$regTcpdump '{if ($0 ~ regTcpdump){line=$2"."$3"."$4"."$5":"$6" > "$8"."$9"."$10"."$11}else{line=$2"."$3"."$4"."$5" > "$8"."$9"."$10"."$11":"$12};sum[line]+=$NF*8/10}END{for (line in sum){printf "%s %dn",line,sum[line]}}' /tmp/tcpdump |
    sort -k 4 -nr | head -n 10 | while read a b c d;do
        echo -ne "33[50C"
        echo "$a $b $c $(bit_to_human_readable $d)/s"