diff --git a/IP_Notifier/ip_notifier.sh b/IP_Notifier/ip_notifier.sh new file mode 100644 index 0000000..e39da75 --- /dev/null +++ b/IP_Notifier/ip_notifier.sh @@ -0,0 +1,104 @@ +#!/bin/bash + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +DUCDEV_LOG_FILEPATH=${SCRIPT_DIR}/ducdev.txt +IP_LOG_FILEPATH=${SCRIPT_DIR}/ip.txt +EMAIL_FILEPATH=${SCRIPT_DIR}/email.txt +LOG_FILEPATH=${SCRIPT_DIR}/log.txt +ALIVE_LOG_FILEPATH=${SCRIPT_DIR}/am_i_alive.txt + +EMAIL_TO=dkle99@yahoo.com +EMAIL_FROM=noreply@noreply.com + +echo -e "`date`\n" > ${LOG_FILEPATH} + +# In order to use the "dig" command, need to install DNS Server package from the Synology Package Center +CURRENT_WAN_IP4=$(/var/packages/DNSServer/target/bin/dig @resolver4.opendns.com myip.opendns.com +short) + +while [ "${CURRENT_WAN_IP4}" == "" ]; do + echo -e "`date` - Unable to obtain extern IP." >> ${LOG_FILEPATH} + sleep 3600 + CURRENT_WAN_IP4=$(/var/packages/DNSServer/target/bin/dig @resolver4.opendns.com myip.opendns.com +short) +done + +echo "Current IP: ${CURRENT_WAN_IP4}" + +if [ ! -f "${IP_LOG_FILEPATH}" ]; then + echo "${CURRENT_WAN_IP4}" |& tee ${IP_LOG_FILEPATH} + SAVED_WAN_IP4=${CURRENT_WAN_IP4} +else + SAVED_WAN_IP4=$(head -n 1 ${IP_LOG_FILEPATH}) + echo "Saved IP: ${SAVED_WAN_IP4}" +fi + +while true; do + echo "Last updated on `date` " > ${ALIVE_LOG_FILEPATH} + if [[ "${CURRENT_WAN_IP4}" != "${SAVED_WAN_IP4}" ]]; then + echo "IP has changed" + echo "${CURRENT_WAN_IP4}" |& tee ${IP_LOG_FILEPATH} + echo "To: ${EMAIL_TO} " > ${EMAIL_FILEPATH} + echo "From: ${EMAIL_FROM} " >> ${EMAIL_FILEPATH} + echo "Subject: IP Changed ${CURRENT_WAN_IP4}" >> ${EMAIL_FILEPATH} + echo -e "\nThe old IP was ${SAVED_WAN_IP4}\nDate changed: `date`\n" >> ${EMAIL_FILEPATH} + email_response=$(ssmtp ${EMAIL_TO} < ${EMAIL_FILEPATH} 2>&1) + if [[ "$email_response" == "" ]]; then + echo -e "\nEmail Sent Successfully\n" + else + echo -e "\n\nWARNING -- An error occurred while sending email. The error was: $email_response\n\n" + fi + SAVED_WAN_IP4=${CURRENT_WAN_IP4} + fi + + DUCDEV_IP4=$(/var/packages/DNSServer/target/bin/dig ducdev.com +short) + + while [ "${DUCDEV_IP4}" == "" ]; do + echo -e "`date` - Unable to obtain DucDev.com IP." >> ${LOG_FILEPATH} + sleep 3600 + DUCDEV_IP4=$(/var/packages/DNSServer/target/bin/dig ducdev.com +short) + done + + echo "DucDev IP: ${DUCDEV_IP4}" + + if [[ "${CURRENT_WAN_IP4}" != "${DUCDEV_IP4}" ]]; then + SEND_EMAIL=false + if [ -f "${DUCDEV_LOG_FILEPATH}" ]; then + SAVED_DATE=$(head -n 1 ${DUCDEV_LOG_FILEPATH}) + + if [ "${SAVED_DATE}" != "$(date +"%D")" ]; then + SEND_EMAIL=true + fi + else + SEND_EMAIL=true + fi + + if [ "${SEND_EMAIL}" = true ]; then + echo "DucDev.com IP does not match home's external IP" + echo "To: ${EMAIL_TO} " > ${EMAIL_FILEPATH} + echo "From: ${EMAIL_FROM} " >> ${EMAIL_FILEPATH} + echo "Subject: IP Changed ${CURRENT_WAN_IP4}" >> ${EMAIL_FILEPATH} + echo -e "\nDucDev.com IP is ${DUCDEV_IP4}\nDate changed: `date`\n" >> ${EMAIL_FILEPATH} + email_response=$(ssmtp ${EMAIL_TO} < ${EMAIL_FILEPATH} 2>&1) + if [[ "$email_response" == "" ]]; then + echo -e "\nEmail Sent Successfully\n" + else + echo -e "\n\nWARNING -- An error occurred while sending email. The error was: $email_response\n\n" + fi + + echo "$(date +"%D")" > ${DUCDEV_LOG_FILEPATH} + fi + fi + + sleep 3600 + CURRENT_WAN_IP4=$(/var/packages/DNSServer/target/bin/dig @resolver4.opendns.com myip.opendns.com +short) + + while [ "${CURRENT_WAN_IP4}" == "" ]; do + echo -e "`date` - Unable to obtain extern IP." >> ${LOG_FILEPATH} + sleep 3600 + CURRENT_WAN_IP4=$(/var/packages/DNSServer/target/bin/dig @resolver4.opendns.com myip.opendns.com +short) + done +done + + + +