#!/bin/bash -
#===============================================================================
#
#          FILE: tcp_connections
#
#         USAGE: tcp_connections [IP]
#
#   DESCRIPTION: Count tcp connections
#
#  REQUIREMENTS: netsat
#        AUTHOR: rickz (Rick Zhang), xlrickz@gmail.com
#       COMPANY: X-LEGEND Entertainment Corp.
#       CREATED: Mon Aug 29 00:14:42 EDT 2011
#      REVISION: 1.0
#===============================================================================

#set -o nounset                              # Treat unset variables as an error
#set -m                                      # Enable job control


[ "$1" == "-h" ] && exec echo "Usage: $0 [IP]"

IP="$(egrep "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" <<< "$1")"

which geoiplookup > /dev/null 2>&1 && GEOIP_MODE=1

if [ "$GEOIP_MODE" == "1" ] ; then
	netstat -an|grep "$IP"|awk '/ESTABLISHED/ {print $5}'|awk -F: '{print $1}'|grep -v "^$"|sort|uniq -c\
	|awk '{printf("echo -e \"$(geoiplookup %s 2> /dev/null | sed \"s/^.......................\\(..\\).*/\\1/g\" ) %s\\t%s\\t",$2,$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "\"" }'|sort -k 2 -g|sh
else
	netstat -an|grep "$IP"|awk '/ESTABLISHED/ {print $5}'|awk -F: '{print $1}'|grep -v "^$"|sort|uniq -c\
	|awk '{printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }'|sort -k 2 -g
fi
