
#!/bin/sh
# File  : ping_netw-nslookup.sh
# By    : MaartenDeBoer.nl, 090611, 110124
# Subject       : Ping filers from $HOME/etc/filers
#(0.2)	: Added nslookup
#(0.3),170511	: Some mod's
#(0.4),170512	: Added ${1}
#(0.5),170918	: Added web-page update + USAGE
#(0.6),170918	: Added colors
#(0.7),180705	: Mod nslookup | head -1
#
#(0.8b?),190311	: Added PREV result
#(0.9b),190311	: Added PREV with color
#(0.10),190312	: Mod; when nothing to see, print nothing
#(0.11),190314	: Mod. Is in DNS. str", added SSH
#(0.12),190401	: Mod; no nslookup, added RC-file
#(0.13),241212	: Add 3rd loop (PART3), Add SUBNET2. PART=>PART4, NETWEND=>NEDN4
#(0.14),241212	: added -f (hostfile)
PGM="`basename $0|cut -d\. -f1`"
VER="0.14"
TMP="/tmp/${PGM}.$$"
CSV="/tmp/${PGM}.csv"
LOG="${HOME}/log/${PGM}.log"
HOSTNAME="`hostname|cut -d\. -f1`"
MAIL=""
MAILTO="maarten@agrarix.nl"
SUBNET3="192.168.178"
SUBNET2="44.137"
PART3=0
NEND3=103
PART4=1
NEND4=254
WEBUPD=""
HTML="/mnt/nas/www/domains/status.agrarix.net/pages/netw0rk.html"
DATADIR="${HOME}/data"
DATAFILE="${DATADIR}/ping-netw-lookup.csv"
PREVRESULT=""
CHKSSH=""
SSH="/usr/bin/ssh -n"
NSLOOKUP=""
RCFILE="${HOME}/etc/${PGM}.rc"
HOSTSFILE=""
HOSTSFILE="${HOME}/etc/hosts.137"

USAGE()
{
  echo "Usage: ${PGM} <options>"
  echo "  Version: ${VER}"
  echo "  options         :"
  echo "    -c|--chkssh   : Chk hostname with SSH (hostname) (${NEND4})"
  echo "    -e|--end      : End of network (${NEND4})"
  echo "    -f|--hostsfile : using HOSTSfile (${HOSTSFILE})"
  echo "    -h|--help     : this Help"
  echo "    -l|--nslookup : with nsLookup"
  echo "    -m|--mail     : do send Mail"
  echo "    -n|--netw     : Netw (part) (${SUBNET3})"
  echo "    -w|--webupd   : Update Web page (${HTML})"
  echo "    -V            : show Version"
  echo "    -x            : set -x"
  echo "    --mailto      : change MAILTO address & do send mail (${MAILTO})"
}
## MAIN
# Check options
if [ $# -eq 0 ]; then
  echo "No option(s) given. So not to know what to do. Exiting..."; echo; USAGE; exit 1
fi
while [ $# -gt 0 ]
  do
  case $1 in
    -c | --chkssh) CHKSSH=1 ;;
    -m | --mail) MAIL=1 ;;
    -e | --etc) NEND4=$2; shift ;;
    -f | --hostsfile) HOSTSFILE="${2}"; shift ;;
    -l | --nslookup) NSLOOKUP=1 ;;
    -n | --netw) SUBNET3=$2; shift ;;
    -w | --webupd) WEBUPD=1 ;;
    --mailto) MAILTO=$2; MAIL=1; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option ${1} not known. Exiting..."; echo; USAGE; exit 1 ;;
  esac
    shift
done

echo "`date` ${PGM} v${VER} started. With SUBNET3=${SUBNET3}"|tee -a ${LOG}
if [ -f ${RCFILE} ]; then
  echo "  Reading RC-file (${RCFILE})..."|tee -a ${LOG}
  . ${RCFILE}
fi
touch ${TMP} 
echo "SSH=${SSH}"
echo "CHKSSH=${CHKSSH}"
echo "CSV=${CSV}"
echo "DATADIR=${DATADIR}"
echo "DATAFILE=${DATAFILE}"
echo "HOSTSFILE=${HOSTSFILE}"
echo "SUBNET2=${SUBNET2}"
echo "SUBNET3=${SUBNET3}"
echo "NEND3=${NEND3}"
echo "NEND4=${NEND4}"
echo "NSLOOKUP=${NSLOOKUP}"
echo "MAIL=${MAIL}"
echo "MAILTO=${MAILTO}"
echo "WEBUPD=${WEBUPD}"
echo "RCFILE=${RCFILE}"
echo "HTML=${HTML}"

sleep 1

if [ ! -d ${DATADIR} ]; then
  mkdir -p ${DATADIR}
  echo "  NO ${DATADIR}. Created one"|tee -a ${LOG}
fi
if [ "${HOSTSFILE}" != "" ] && [ ! -f ${HOSTSFILE} ]; then
  echo "  NO HOSTSFILE (${HOSTSFILE}). Exiging ..."|tee -a ${LOG}
  exit 4
fi



# Loop2 (3rd Octed)
while [ ${PART3} -le ${NEND3} ]
do


# Loop1 (4rd Octed)
while [ ${PART4} -le ${NEND4} ]
do
#  echo "${SUBNET3}.${PART4}"
  echo "${SUBNET2}.${PART3}.${PART4}"
  echo "<TR>" >> ${TMP}

  IPCOL=""
  PINGCOL=""
  PINGSTR=""
  NSLCOL=""
  REMARKS=""
  PREVRESULT=""
  PREVCOL=""
  REMCOL=""
  SSHANSW=""

  NSL=""


# Check if in HOSTSFILE

  ANSW=`grep "${SUBNET2}.${PART3}.${PART4}" ${HOSTSFILE}`
  if [ "${ANSW}" != "" ]; then
    echo "  ${ANSW}"

  if [ ${NSLOOKUP} ]; then
    NSL="`nslookup ${SUBNET2}.${PART3}.${PART4}|grep name|cut -d\= -f2|head -1`"
  fi

  ping -W 2 -c 1 -W 1 ${SUBNET2}.${PART3}.${PART4} 2> /dev/null
  EC=${?}
  if [ ${EC} -eq 0 ]; then
    echo "${SUBNET2}.${PART3}.${PART4};OK;${NSL};" | tee -a ${CSV}
    PINGSTR="OK"
  else
#    echo "${SUBNET2}.${PART3}.${PART4};no ping;;" | tee -a ${CSV}
    PINGSTR="no ping" 
  fi

  if [ ! ${NSLOOKUP} ] && [ "${PINGSTR}" = "OK" ]; then
    IPCOL="lightgreen"
    PINGCOL="lightgreen"
    REMARKS="ping OK"
    REMCOL="lightgreen"
  fi
  if [ "${PINGSTR}" = "OK" ] && [ "${NSL}" != "" ]; then
    IPCOL="lightgreen"
    PINGCOL="lightgreen"
    NSLCOL="lightgreen"
    REMARKS="All OK"
    REMCOL="lightgreen"
  fi

  if [ ${NSLOOKUP} ] && [ "${PINGSTR}" = "OK" ] && [ "${NSL}" = "" ]; then
    IPCOL="yellow"
    PINGCOL="yellow"
    NSLCOL="yellow"
    REMARKS="Need to be added in DNS?"
    REMCOL="yellow"
    if [ ${CHKSSH} ]; then
      SSHANSW=`${SSH} ${SUBNET2}.${PART3}.${PART4} hostname`
      NSL="hostname: ${SSHANSW}" 
    fi
  fi
  if [ "${PINGSTR}" != "OK" ] && [ "${NSL}" != "" ]; then
    IPCOL="orange"
    PINGCOL="orange"
    NSLCOL="orange"
    REMARKS="Is in DNS. But NO answer"
    REMCOL="orange"
  fi

# Search for PREV
  if [ -f ${DATAFILE} ]; then
    PREVRESULT=`grep "${SUBNET2}.${PART3}.${PART4};" ${DATAFILE}|awk -F\; '{print $2}'`
    if [ "${PINGSTR}" = "OK" ] && [ "${PINGSTR}" = "${PREVRESULT}" ]; then
      PREVCOL="lightgreen"
    fi
    if [ "${PREVRESULT}" = "OK" ] && [ "${PINGSTR}" != "${PREVRESULT}" ]; then
      PREVCOL="yellow"
    fi
#echo "  PREVRESULT=${PREVRESULT}  PREVCOL=${PREVCOL}"
  fi

  if [ "${REMCOL}" != "" ]; then
    echo "  <TD BGCOLOR=${IPCOL}> ${SUBNET2}.${PART3}.${PART4} </TD>" >> ${TMP}
    echo "  <TD BGCOLOR=${PINGCOL}> ${PINGSTR} </TD>" >> ${TMP}
    echo "  <TD BGCOLOR=${NSLCOL}> ${NSL} </TD>" >>  ${TMP}
    echo "  <TD BGCOLOR=${REMCOL}> ${REMARKS} </TD>" >>  ${TMP}
    echo "  <TD BGCOLOR=${PREVCOL}> ${PREVRESULT} </TD>" >> ${TMP}
    echo "</TR>" >> ${TMP}
  fi 


  fi  # ANSW grep HOSTSFILE

  PART4="`expr ${PART4} + 1`"
done  # Loop1
  PART4=1
  PART3="`expr ${PART3} + 1`"
done  # Loop2




if [ ${WEBUPD} ]; then

  echo "<!DOCTYPE html>" > ${HTML}
  echo "<HTML>" >> ${HTML}
  echo "<HEAD>" >> ${HTML}
  echo "<META charset='UTF-8'>" >> ${HTML}
  echo "<META content=Maarten de Boer name=AUTHOR>" >> ${HTML}
  echo "<TITLE> Ping & DNS status: </TITLE>" >> ${HTML}
  echo "<basefont face='verdana'>" >> ${HTML}
  echo "</HEAD>" >> ${HTML}
  echo "<BODY aLink=red bgColor=#D3D0D3 link=red text=#000000 vLink=#ff0000>" >> ${HTML}

  echo "<TABLE BORDER=1>" >> ${HTML}

  echo "<TR>" >> ${HTML}
  echo "  <TD BGCOLOR=lightblue> <B> IP-addr </TD>" >> ${HTML}
  echo "  <TD BGCOLOR=lightblue> <B> ping </TD>" >> ${HTML}
  echo "  <TD BGCOLOR=lightblue> <B> DNS </TD>" >> ${HTML}
  echo "  <TD BGCOLOR=lightblue> <B> Remarks </TD>" >> ${HTML}
  echo "  <TD BGCOLOR=lightblue> <B> Previous (ping) result </TD>" >> ${HTML}
  echo "</TR>" >> ${HTML}
  
cat ${TMP} >> ${HTML}

echo "</TABLE>" >> ${HTML}

echo "<TABLE>" >> ${HTML}
echo "<TR> " >> ${HTML}
echo "  <TD bgColor=lightblue > " >> ${HTML}
echo "    <FONT COLOR=white face='Verdana' size='1'>" >> ${HTML}
echo "      <CENTER>" >> ${HTML}
echo "For (c)INTERNAL USE ONLY <BR> Contact + Content Owner: <A HREF="mailto:Maarten@Agrarix.nl">Maarten de Boer</A> <BR> Last Update: `date` <BR> [${PGM} v${VER}]<BR>" >> ${HTML}
echo "      </CENTER>" >> ${HTML}
echo "    </FONT>" >> ${HTML}
echo "  </TD>" >> ${HTML}
echo "</TR>" >> ${HTML}
echo "</TABLE>" >> ${HTML}

echo "</BODY>" >> ${HTML}
echo "</HTML>" >> ${HTML}

fi  # WEBUDP

if [ ${MAIL} ]; then
  date| mailx -a ${CSV} -s ":${HOSTNAME}: ping netw ${SUBNET2} [${PGM} v${VER}]" ${MAILTO}
  echo "`date` Mailed to ${MAILTO}"|tee -a ${LOG}
fi

# (new:) Keep TMP(DATAFILE)
cp ${CSV} ${DATAFILE}

rm ${TMP} 
exit 0

