#!/bin/bash # ====================================================================== # # Check NETSTAT and show connections # # requirements: # - netstat # # ---------------------------------------------------------------------- # 2020-07-08 v1.0 <axel.hahn@iml.unibe.ch> # 2022-10-25 v1.1 <axel.hahn@unibe.ch> shell fixes; no tmpfiles; IML look # ====================================================================== . $(dirname $0)/inc_pluginfunctions self_APPNAME=$( basename $0 | tr [:lower:] [:upper:] ) self_APPVERSION=1.1 # ---------------------------------------------------------------------- # functions # ---------------------------------------------------------------------- function showHelp(){ cat <<EOF ______________________________________________________________________ $self_APPNAME v$self_APPVERSION (c) Institute for Medical Education - University of Bern Licence: GNU GPL 3 ______________________________________________________________________ Count number of network connections. SYNTAX: $(basename $0) [ -w value -c value -h ] -w VALUE cpu usage warning level (default: 75) -c VALUE cpu usage critical level (default: 90) -h or --help show this help. PARAMETERS: None. EXAMPLE: $(basename $0) -w 60 -c 80 -p 40 If there is no -w and -c then the result is always OK. EOF } # ---------------------------------------------------------------------- # MAIN # ---------------------------------------------------------------------- # --- check required tools ph.require netstat # --- check param -h case "$1" in "--help"|"-h") showHelp exit 0 ;; *) esac # --- set optional limits typeset -i iWarnLimit=$( ph.getValueWithParam 0 w "$@") typeset -i iCriticalLimit=$( ph.getValueWithParam 0 c "$@") # --- count all connections typeset -i iTotal=0 typeset -i iEst=0 typeset -i iListen=0 typeset -i iWait=0 netdata=$( (netstat -wltun; netstat -wtun) | awk '{ print $6 }' | grep -E '(ESTABLISHED|LISTEN|TIME_WAIT)' ) iTotal=$( echo "$netdata" | wc -l | awk '{ print $1 }') if [ $iWarnLimit -gt 0 -a $iCriticalLimit -gt 0 ]; then ph.setStatusByLimit $iTotal $iWarnLimit $iCriticalLimit fi ph.status "NETSTAT - count of connections: $iTotal" # --- add performance data data2=$( echo "$netdata" | sort | uniq -c ) # result is something like that: # 5 ESTABLISHED # 10 LISTEN # 77 TIME_WAIT echo "$data2" iEst=$( echo "$data2" | grep ESTABLISHED | awk '{ print $1 }' ) iListen=$( echo "$data2" | grep LISTEN | awk '{ print $1 }' ) iWait=$( echo "$data2" | grep TIME_WAIT | awk '{ print $1 }' ) ph.perfadd "established" "$iEst" ph.perfadd "listen" "$iListen" ph.perfadd "time-wait" "$iWait" # --- bye ph.exit