#!/bin/bash # who_is script by Kyle Yoksh, K0KN 7/2013, # last revised 1/16/2021 # # This script should be owned by a user - NOT ROOT! # # This script will resolve an Allstar node number, and will send output # to screen or email. # # Usage = who_is [node #] [ e ] e = email output # # CHANGE THESE VARIABLES ONLY # --------------------------- SENDTO="TARGET EMAIL ADDRESS" SENDAS="SENDING EMAIL ADDRESS" PRIVATE_LIST="/home/kyle/private_nodelist" # # YOU SHOULD NOT NEED TO EDIT THESE VARIABLES # ------------------------------------------- SUBJECT="who_is" LOGFILE="/var/log/asterisk/connectlog" LISTURL=http://stats.allstarlink.org/api/stats/mapData NODELIST="/dev/shm/allstar_nodelist" WHOISEMAIL="/dev/shm/whois_email.tmp" ALLSTARRPTEXTNODES="/var/lib/asterisk/rpt_extnodes" # # Flush variables retrycount=0 url="" name="" COUNT="" NODENO="" if [ "$1" == "" ] ; then echo "Usage = who_is [node #] [ e ]" ; exit fi echo downloadnodelist () { # Create / update local nodelist retrycount=$((retrycount + 1)) if [ $retrycount == 10 ] ; then echo $(date) "Error downloading nodelist - who_is" >> $LOGFILE ; echo "Error downloading nodelist -- exiting" ; exit ; fi if ! [ -f $NODELIST ] ; then echo "No nodelist found - downloading" ; wget -O "$NODELIST"2 $LISTURL ; appendprivate ; fi if [ "$(( $(date +"%s") - $(stat -c "%Y" $NODELIST) ))" -gt "3600" ] ; then echo "Nodelist over 1 hour old - downloading new" ; wget -O "$NODELIST"2 $LISTURL ; appendprivate ; fi } appendprivate () { # Remove lat/long fields cut -f1,2,5,6 "$NODELIST"2 > $NODELIST # Append private nodelist to Allstar nodelist if file exists if [ -s "$PRIVATE_LIST" ] ; then grep -v '^$' "$PRIVATE_LIST" > "$PRIVATE_LIST"2 cp -f "$PRIVATE_LIST"2 "$PRIVATE_LIST" rm -f "$PRIVATE_LIST"2 echo "Private nodelist found. Adding entries from $PRIVATE_LIST to $NODELIST" cat "$PRIVATE_LIST" >> "$NODELIST" echo fi } # Delete nodelist if zero bytes if ! [ -s $NODELIST ] ; then rm -f $NODELIST ; fi # Run Check/download nodelist routine downloadnodelist ############################# if ! [ "$2" == "e" -o "$2" == "E" ] ; then WHOISOUTPUT="Output to screen only" else WHOISOUTPUT="Sent output via email/text message" fi # Extract IP address from Allstar nodelist if [ -s "$ALLSTARRPTEXTNODES" ] ; then grep -F "$1=radio" "$ALLSTARRPTEXTNODES" > "$NODELIST"3 ALLSTARNODEIP=$(cut -f2 -d"," "$NODELIST"3) fi # Count number of digits for remote station COUNT=$(echo $1 | wc -m) COUNT=$(( $COUNT - 1 )) # if [ "$COUNT" == 3 ] ; then ALLSTARNODEIP="" fi # Random sleep time in case multiple nodes run script at same time # uncomment if having timing issues with multiple nodes on same box # sleep $[ ( $RANDOM % 5 ) +1]s ASNODE=$(grep -w ^$1 $NODELIST) # ASNODE=$(grep ^$1 $NODELIST) # Output to screen only if [ -z "$ASNODE" ] ; then ASNODE="Node $1 not found in nodelist" fi echo "$ASNODE $ALLSTARNODEIP" echo "$ASNODE $ALLSTARNODEIP" > "$WHOISEMAIL" # Add entry to log echo $(date) "who_is $1 - " $ASNODE $ALLSTARNODEIP $WHOISOUTPUT >> $LOGFILE # if ! [ "$2" == "e" -o "$2" == "E" ] ; then echo exit fi # Email output echo "Sending output via email/text message" mail -s "$SUBJECT" -a "From: $SENDAS <$SENDAS>" "$SENDTO" < $WHOISEMAIL # Done! rm -f "$NODELIST"2 rm -f "$NODELIST"3 exit 0