#!/bin/bash ######################################################################### # Check WIFI and Reachability # # Created by PM-DoIT # # ver 0.7 # ######################################################################### #------------------------------ VARIABLES ------------------------------# DAT=$(date +%y%m%d" "%T) LOG="/var/log/wifi.log" WWW=/var/www/wifi/ test -d $WWW || mkdir $WWW #------------------------------ NIC-CHECK ------------------------------# interfaces(){ NIC=$(find /sys/class/net -type l -not -lname '*virtual*' -printf '%f\n' | grep -v wlan | head -1) WIC=$(find /sys/class/net -type l -not -lname '*virtual*' -printf '%f\n' | grep wlan | head -1) RTR=$(ip route | grep ^default | awk '{print $3}') } #------------------------------ IP-CHECK -------------------------------# address(){ echo "------------------------------------" if [ ! -z "$NIC" ]; then LIP=$(ip a | grep $NIC | grep "state UP"); fi if [ ! -z "$WIC" ]; then WIP=$(ip a | grep $WIC | grep "state UP"); fi if [ ! -z "$NIC" ]; then echo -e "- \e[1;32mExist\e[0m \e[1;34mLAN\e[0m interface [\e[1;34m$NIC\e[0m]" if [ ! -z "$LIP" ]; then echo -e "- \e[1;34mLAN\e[0m interface is [\e[1;32mUP\e[0m]" IPA=$(ifconfig $NIC | grep -w inet | awk '{print $2}') echo -e "- \e[1;32mActual\e[0m IP address [\e[1;35m$IPA\e[0m]" if [ ! -z "$WIC" ]; then echo -e "- \e[1;32mExist\e[0m \e[1;36mWIFI\e[0m interface [\e[1;36m$WIC\e[0m]" if [ ! -z "$WIP" ]; then echo -e "- \e[1;36mWIFI\e[0m interface is [\e[1;32mUP\e[0m]" echo -e "- \e[1;31mDisabling\e[0m [\e[1;36m$WIC\e[0m]" ifconfig $WIC down else echo -e "- \e[1;36mWIFI\e[0m interface is [\e[1;31mDOWN\e[0m]" fi else echo -e "- \e[1;31mNOT\e[0m exist \e[1;36mWIFI\e[0m interface" fi exit 1 else echo -e "- \e[1;34mLAN\e[0m interface is [\e[1;31mDOWN\e[0m]" echo -e "- \e[1;32mExist\e[0m \e[1;36mWIFI\e[0m interface [\e[1;36m$WIC\e[0m]" if [ ! -z "$WIP" ]; then echo -e "- \e[1;36mWIFI\e[0m interface is [\e[1;32mUP\e[0m]" IPA=$(ifconfig $WIC | grep -w inet | awk '{print $2}') echo -e "- \e[1;32mActual\e[0m IP address [\e[1;35m$IPA\e[0m]" else echo -e "- \e[1;36mWIFI\e[0m interface is [\e[1;31mDOWN\e[0m]" echo -e "- \e[1;32mEnabling\e[0m [\e[1;36m$WIC\e[0m]" ifconfig $WIC up sleep 2 /usr/bin/systemctl restart NetworkManager sleep 4 interfaces IPA=$(ifconfig $WIC | grep -w inet | awk '{print $2}') echo -e "- \e[1;32mActual\e[0m IP address [\e[1;35m$IPA\e[0m]" fi fi elif [ ! -z "$WIC" ]; then echo -e "- \e[1;32mExist\e[0m \e[1;36mWIFI\e[0m interface [\e[1;36m$WIC\e[0m]" if [ ! -z "$WIP" ]; then echo -e "- \e[1;36mWIFI\e[0m interface is [\e[1;32mUP\e[0m]" IPA=$(ifconfig $WIC | grep -w inet | awk '{print $2}') echo -e "- \e[1;32mActual\e[0m IP address [\e[1;35m$IPA\e[0m]" else echo -e "- \e[1;36mWIFI\e[0m interface is [\e[1;31mDOWN\e[0m]" echo -e "- \e[1;32mEnabling\e[0m [\e[1;36m$WIC\e[0m]" ifconfig $WIC up sleep 2 /usr/bin/systemctl restart NetworkManager sleep 4 interfaces IPA=$(ifconfig $WIC | grep -w inet | awk '{print $2}') echo -e "- \e[1;32mActual\e[0m IP address [\e[1;35m$IPA\e[0m]" fi else echo -e "- \e[1;31mNOT\e[0m exist ANY interface" exit 1 fi } #------------------------------ SIGNAL ---------------------------------# signal(){ if [ -z "$WIC" ]; then exit 1 else iwconfig $WIC | grep -i --color quality | sed 's/=/ /g' | sed 's/\// /g' | awk '{print $4,$3}' > /tmp/wifi SID=$(iwconfig $WIC | grep ESSID | sed 's/:/ /g' | sed 's/"//g' | awk '{print $5}') TOT=$(cat /tmp/wifi | awk '{print $1}') ACT=$(cat /tmp/wifi | awk '{print $2}') PER=$((100*$ACT/$TOT)) echo $PER > /tmp/wifi fi } #----------------------------- FIX-WIFI --------------------------------# fixwifi(){ echo -e "- \e[1;31mRestarting\e[0m interface [\e[1;36m$WIC\e[0m]" ifconfig $WIC down sleep 1 iwconfig $WIC power off ifconfig $WIC up sleep 2 /usr/bin/systemctl restart NetworkManager sleep 3 echo "$DAT restarted $WIC" >> $LOG } #------------------------------ LATENCY --------------------------------# latency(){ ping -c 2 $RTR > /tmp/wifi.ping MS=$(cat /tmp/wifi.ping | grep icmp_seq | sed 's/=/ /g' | awk '{print $10}' | sort | tail -1) echo "$DAT ${PER}% ${MS}ms" >> $LOG if [ -z "$MS" ]; then fixwifi; fi } #------------------------------- REPORT --------------------------------# report(){ echo "------------------------------------" echo -e "Reachability [\e[1;32m$RTR\e[0m] (\e[1;33m$MS\e[0m)ms" echo -e "Wifi Link Quality [\e[1;32m$SID\e[0m] (\e[1;33m$PER\e[0m)%" echo "------------------------------------" } #------------------------------ GRAPHING -------------------------------# graphing(){ /usr/bin/rrdtool update /var/www/wifi/wifi.rrd N:$PER echo -e "- \e[1;32mGenerating\e[0m [RRD] graphs" RRDPATH="/var/www/wifi/" REDL="#1E90FF" REDD="#00008B" #-------------------------------- HOUR ---------------------------------# rrdtool graph $RRDPATH/hour.png --title="6h Period of WiFi Signal Quality" --start -6h \ --height=240 \ --width=640 \ --lower-limit=0 \ --vertical-label='quality' \ --font TITLE:12: \ --font AXIS:8: \ --font LEGEND:10: \ --font UNIT:8: \ DEF:wifi=$RRDPATH/wifi.rrd:wifi:AVERAGE \ LINE:wifi$REDD:"%" \ AREA:wifi$REDL \ GPRINT:wifi:LAST:"Current\:%8.2lf %s" \ GPRINT:wifi:MIN:"Minimum\:%8.2lf %s" \ GPRINT:wifi:MAX:"Maximum\:%8.2lf %s\n" > /dev/null 2>&1 #-------------------------------- DAY ----------------------------------# rrdtool graph $RRDPATH/day.png --title="Day Period of WiFi Signal Quality" --start -1d \ --height=240 \ --width=640 \ --lower-limit=0 \ --vertical-label='quality' \ --font TITLE:12: \ --font AXIS:8: \ --font LEGEND:10: \ --font UNIT:8: \ DEF:wifi=$RRDPATH/wifi.rrd:wifi:AVERAGE \ LINE:wifi$REDD:"%" \ AREA:wifi$REDL \ GPRINT:wifi:AVERAGE:"Average\:%8.2lf %s" \ GPRINT:wifi:MIN:"Minimum\:%8.2lf %s" \ GPRINT:wifi:MAX:"Maximum\:%8.2lf %s\n" > /dev/null 2>&1 #-------------------------------- WEEK ---------------------------------# rrdtool graph $RRDPATH/week.png --title="Week Period of WiFi Signal Quality" --start -1w \ --height=240 \ --width=640 \ --lower-limit=0 \ --vertical-label='quality' \ --font TITLE:12: \ --font AXIS:8: \ --font LEGEND:10: \ --font UNIT:8: \ DEF:wifi=$RRDPATH/wifi.rrd:wifi:AVERAGE \ LINE:wifi$REDD:"%" \ GPRINT:wifi:AVERAGE:"Average\:%8.2lf %s" \ GPRINT:wifi:MIN:"Minimum\:%8.2lf %s" \ GPRINT:wifi:MAX:"Maximum\:%8.2lf %s\n" > /dev/null 2>&1 #------------------------------- MONTH ---------------------------------# rrdtool graph $RRDPATH/month.png --title="Month Period of WiFi Signal Quality" --start -1m \ --height=240 \ --width=640 \ --lower-limit=0 \ --vertical-label='quality' \ --font TITLE:12: \ --font AXIS:8: \ --font LEGEND:10: \ --font UNIT:8: \ DEF:wifi=$RRDPATH/wifi.rrd:wifi:AVERAGE \ LINE:wifi$REDD:"%" \ GPRINT:wifi:AVERAGE:"Average\:%8.2lf %s" \ GPRINT:wifi:MIN:"Minimum\:%8.2lf %s" \ GPRINT:wifi:MAX:"Maximum\:%8.2lf %s\n" > /dev/null 2>&1 #-------------------------------- YEAR ---------------------------------# rrdtool graph $RRDPATH/year.png --title="Year Period of WiFi Signal Quality" --start -1y \ --height=240 \ --width=640 \ --lower-limit=0 \ --vertical-label='quality' \ --font TITLE:12: \ --font AXIS:8: \ --font LEGEND:10: \ --font UNIT:8: \ DEF:wifi=$RRDPATH/wifi.rrd:wifi:AVERAGE \ LINE:wifi$REDD:"%" \ GPRINT:wifi:AVERAGE:"Average\:%8.2lf %s" \ GPRINT:wifi:MIN:"Minimum\:%8.2lf %s" \ GPRINT:wifi:MAX:"Maximum\:%8.2lf %s\n" > /dev/null 2>&1 } #-------------------------------- CORE ---------------------------------# clear interfaces address signal latency graphing report