netstat 每秒监控网络连接状态

阎卓
2023-12-01

start-monitor.sh 

#!/bin/bash
# nmon 采样时间s
INTERVAL=1
# nmon 采样次数
COUNT=310
# 本地服务端口
LISTEN_PORT=80

echo "后台开启nmon"
nmon -s ${INTERVAL} -c ${COUNT} -f -m /tmp

echo "统计网络连接情况"
echo "TIME,SYN_RECV,ESTABLISHED,FIN_WAIT1,FIN_WAIT2,TIME_WAIT,CLOSE_WAIT" > /tmp/netstat-${LISTEN_PORT}.csv
for ((i=1; i<=${COUNT}; i++))
do
    echo ${i}
    TIME=$(date | awk '{print $4}')
    nstat=$(netstat -nt | grep :${LISTEN_PORT} | awk '{++Z[$NF]} END {for(a in Z) print a, Z[a]}')
    SYN_RECV=$(echo "${nstat}" | grep "SYN_RECV" | awk '{print $2}')
    if [ "${SYN_RECV}" = "" ];then
            SYN_RECV=0
    fi

    ESTABLISHED=$(echo "${nstat}" | grep "ESTABLISHED" | awk '{print $2}')
    if [ "${ESTABLISHED}" = "" ];then
            ESTABLISHED=0
    fi

    FIN_WAIT1=$(echo "${nstat}" | grep "FIN_WAIT1" | awk '{print $2}')
    if [ "${FIN_WAIT1}" = "" ];then
            FIN_WAIT1=0
    fi

    FIN_WAIT2=$(echo "${nstat}" | grep "FIN_WAIT2" | awk '{print $2}')
    if [ "${FIN_WAIT2}" = "" ];then
            FIN_WAIT2=0
    fi

    TIME_WAIT=$(echo "${nstat}" | grep "TIME_WAIT" | awk '{print $2}')
    if [ "${TIME_WAIT}" = "" ];then
            TIME_WAIT=0
    fi

    CLOSE_WAIT=$(echo "${nstat}" | grep "CLOSE_WAIT" | awk '{print $2}')
    if [ "${CLOSE_WAIT}" = "" ];then
            CLOSE_WAIT=0
    fi
    echo "${TIME},${SYN_RECV},${ESTABLISHED},${FIN_WAIT1},${FIN_WAIT2},${TIME_WAIT},${CLOSE_WAIT}" >> /tmp/netstat-${LISTEN_PORT}.csv
    sleep ${INTERVAL}
done

 类似资料: