#!/bin/sh # Simple network analysis tool # Tested on Solaris # Steve Parker # Feb 2002 # Set some defaults ... REMOTE_HOST=www.google.com NUMBER_PACKETS=4 LOGDIR=/var/tmp/ INTERFACE=hme0 check_for_file_at() { if [ -r ${1}/snatconfig.txt ]; then SNAT_CONFIG_DIR="${1}" return 0 else return 1 fi } check_config_file() { if [ -z "${SNAT_CONFIG_DIR}" ]; then check_for_file_at ${HOME} || \ check_for_file_at `pwd` || \ check_for_file_at /etc || \ check_for_file_at /var/tmp || \ check_for_file_at /tmp if [ "$?" -ne "0" ]; then echo "WARNING: Cannot read ${SNAT_CONFIG_DIR}/snatconfig.txt - Using defaults:" echo "Remote Host : ${REMOTE_HOST}" echo "Log Directory : ${LOGDIR}" echo "Interface : ${INTERFACE}" echo "Number of Ping Packets@ ${NUMBER_PACKETS}" fi fi } ####### functions start here ###### pingtest() { LATENCY=`ping -s ${REMOTE_HOST} 56 ${NUMBER_PACKETS} | grep "^round-trip" | cut -d"=" -f2|cut -d"/" -f1` echo "PING : ${LATENCY}" return ${LATENCY} } netstattest() { # Get current IN/OUT from netstat # Do not require root priveleges, or muck about with netstat's logging if [ -f ${TMPFILE} ]; then ORIG_IPKTS=`cat ${TMPFILE} | awk '{ print $1 }'` ORIG_OPKTS=`cat ${TMPFILE} | awk '{ print $2 }'` netstat -i | grep "^${INTERFACE}" | awk '{ print $5, $7 }' > ${TMPFILE} IPKTS=`cat ${TMPFILE} | awk '{ print $1 }'` OPKTS=`cat ${TMPFILE} | awk '{ print $2 }'` else netstat -i | grep "^${INTERFACE}" | awk '{ print $5, $7 }' > ${TMPFILE} IPKTS=`cat ${TMPFILE} | awk '{ print $1 }'` OPKTS=`cat ${TMPFILE} | awk '{ print $2 }'` ORIG_IPKTS=${IPKTS} ORIG_OPKTS=${OPKTS} fi if [ "${ORIG_IPKTS}" -lt "${IPKTS}" ]; then IPKTS=`expr ${IPKTS} - ${ORIG_IPKTS}` fi if [ "${ORIG_OPKTS}" -lt "${OPKTS}" ]; then OPKTS=`expr ${OPKTS} - ${ORIG_OPKTS}` fi echo "NETSTAT : ${IPKTS} ${OPKTS}" } whotest() { # Total users logged in: #res=`who | wc -l` # Total UNIQUE users logged in: res=`who | cut -d" " -f1|sort -u|wc -l` echo "WHO : ${res}" return ${res} } pstest() { res=`ps -eaf | wc -l` echo "PS: ${res}" return ${res} } ####### Main script starts here ###### echo "SNAT starting: `date`" check_config_file if [ "$?" -eq "0" ]; then echo "Using Config File: ${SNAT_CONFIG_DIR}/snatconfig.txt" . ${SNAT_CONFIG_DIR}/snatconfig.txt fi TIMESTAMP=`date +%d.%m.%Y` LOGFILE=${LOGDIR}/${TIMESTAMP}.log CSV=${LOGDIR}/${TIMESTAMP}.csv TMPFILE=${LOGDIR}/tmp.txt # Sanity tests... if [ ! -d ${LOGDIR} ]; then mkdir -p "${LOGDIR}" fi if [ ! -w ${LOGDIR} ]; then echo "ERROR: Cannot write to ${LOGDIR}" exit 1 fi #if [ ! -f ${TMPFILE} ]; then #echo "0 0" > ${TMPFILE} #fi if [ ! -f ${CSV} ]; then echo "\"Number of Users\", \"Number of Processes\", \"Latency\", \"Packets In\", \"Packets Out\", \"Date Gathered\", \"Time Gathered\"" > ${CSV} fi # Only log if "--verbose" command switch echo "$1 $2 $3 $4" | grep "verbose" >/dev/null || LOGFILE=/dev/null DATESTR=`date +%m.%d.%Y` TIMESTR=`date +%H:%M` echo "DATE: `date`" >> ${LOGFILE} # Count users whotest >> ${LOGFILE} NUMUSERS=$? # Count processes pstest >> ${LOGFILE} NUMPROCS=$? # Test PING pingtest >> ${LOGFILE} LATENCY=$? netstattest >> ${LOGFILE} echo "${NUMUSERS},${NUMPROCS},${LATENCY},${IPKTS},${OPKTS},${DATESTR},${TIMESTR}" >> ${CSV} echo "==========================" >> ${LOGFILE} echo "Run finished: `date`"