Skip to content

열린 포트당 연결수 구하는 쉘스크립트

MintState November 5, 2008 at 1:01 PM Views 15225

열린 포트당 연결수 구하는 쉘스크립트

http://kltp.kldp.org/stories.php?story=04/02/23/1278181
 

#!/bin/bash 
# 포트당 연결수 구하는 쉘스크립트 
# TIME_WAIT도 연결로 계산 KeepAlive Off ^^ 
# DATE : 20040223 
# MAIL : bando(at)bando.org 
# MSN : bando(at)bando.org 

# IP_ADDR에 현재 서버의 아이피를 저장한다. 
# . /etc/sysconfig/network-scripts/ifcfg-eth0 이렇게 include해서 IPADDR로 써도 된다. 
IP_ADDR=$(awk -F'[=]' '/IPADDR/ {print $2}' /etc/sysconfig/network-scripts/ifcfg-eth0) 

# PORT에 현재 열린 포트들을 정렬해 저장한다. 
PORT=$(netstat -ln|awk '/^tcp/{print $4}'|awk -F: '{print $2}'|sort -n -u) 

# PORT_LINE에 위에 저장한 PORT들의 총 라인수를 저장한다. 
PORT_LINE=$(wc -l<< EOF 
${PORT} 
EOF) 

# PORT_LINE에 저장된 인수중 한번이상 반복 되는 스페이스를 모두 지운다. 
PORT_LINE=$(sed 's/ \{1,\}//' << EOF 
${PORT_LINE} 
EOF) 

#printf "OPEN PORT : " 

for ((KILL=1; KILL <=${PORT_LINE} ; KILL++)) 

do 

# PORT_ONE에 PORT에 저장된 값중 라인이 KILL인 수를 저장한다. 
PORT_ONE=$(sed -n ${KILL}p << EOF 
${PORT} 
EOF 
) 

#printf "%d " $PORT_ONE 

done 

#echo " : TOTAL = $PORT_LINE" 

printf "\n+-------+---------------+\n" 
printf "| PORT\t| CONNECT COUNT\t|" 
printf "\n+-------+---------------+\n" 

#전체 배열의 개수는 이걸로 ${#PORT[@]} 알수 있지만 여기선 뉴라인으로 구분되기에 배열로 못쓸껄요! 아니면 갈쳐주세요! 

for ((KILL=1; KILL <=${PORT_LINE} ; KILL++)) 

do 

PORT_ONE=$(sed -n ${KILL}p << EOF 
${PORT} 
EOF 
) 

# NOW_NUM에 현재 PORT_ONE에 접속한 연결수를 저장한다. 반복되는 아이피는 하나로 처리하고 그라인수를 구하고 하나이상 반복되는 스페이스는 모두 없앤다. 
NOW_NUM=$(netstat -an|awk "/${IP_ADDR}:${PORT_ONE}/ {print \$5}"|awk -F: '{print $1}'|sort -u|wc -l|sed 's/ \{1,\}//') 


printf "| %d\t| \t%d\t|\n" $PORT_ONE $NOW_NUM 

let "T_CON+=NOW_NUM"; 

done 

printf "+-------+---------------+\n" 
printf "| $PORT_LINE\t| \t$T_CON\t|\n" 
printf "+-------+---------------+\n\n" 

exit 0;
Share X Facebook LINE QR code

0 comments

Be the first to comment.