Skip to content

Instantly share code, notes, and snippets.

@Holzkohlen
Forked from harald-aigner/spDYN_update.sh
Last active October 31, 2021 17:41
Show Gist options
  • Save Holzkohlen/016b1da00990475d0441dc9babd84261 to your computer and use it in GitHub Desktop.
Save Holzkohlen/016b1da00990475d0441dc9babd84261 to your computer and use it in GitHub Desktop.
Script for updating spDYN dynamic DNS entries ipv4 and ipv6 (https://spdyn.de)
#!/bin/sh
#
# Script for updating spDYN dynamic DNS entries (https://spdyn.de)
#
# Usage:
# - Save this script as $HOME/bin/spDYN_update.sh
# - Make it executable: chmod u+x $HOME/bin/spDYN_update.sh
# - Create a cron entry (crontab -e) and supply <HOST_NAME> and <UPDATE_TOKEN>
# according to your spDYN settings. Example for running every 10 minutes:
# */10 * * * * $HOME/bin/spDYN_update.sh <HOST_NAME> <UPDATE_TOKEN> > /dev/null
#
# Logs are written to $HOME/.spDYN/
#
# forked from:
# spDYN_update.sh, Copyright 2017 Harald Aigner <harald.aigner@gmx.net>
# Licensed under the GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)
#
# added functionality to update the ivp6 address as well
if [ $# -ne 2 ]
then
echo "Usage: $0 <HOST_NAME> <UPDATE_TOKEN>"
exit 0
fi
HOST_NAME=$1
UPDATE_TOKEN=$2
DATE=`date "+%Y-%m-%d %H:%M:%S"`
UPDATE_URL="https://update.spdyn.de/nic/update"
CHECK_IPV4_URL="http://checkip4.spdyn.de"
CHECK_IPV6_URL="http://checkip6.spdyn.de"
ip_file="${HOME}/.spDYN/${HOST_NAME}"
log_file="${HOME}/.spDYN/${HOST_NAME}.log"
old_ipv4="<not available>"
old_ipv6="<not available>"
if [ -r ${ip_file} ]
then
old_ipv4=$(sed -n 1p ${ip_file})
old_ipv6=$(sed -n 2p ${ip_file})
else
mkdir -p "${HOME}/.spDYN"
fi
ipv4=$(curl -s ${CHECK_IPV4_URL})
if [ -z "${ipv4}" ]
then
echo "${DATE}: error retrieving IPV4" | tee -a "${log_file}"
exit 1
fi
ipv6=$(curl -s ${CHECK_IPV6_URL})
if [ -z "${ipv6}" ]
then
echo "${DATE}: error retrieving IPV6" | tee -a "${log_file}"
exit 1
fi
if [ "${ipv4}" = "${old_ipv4}" ]
then
if [ "${ipv6}" = "${old_ipv6}" ]
then
echo "${DATE}: no IP change (${ipv4}) and (${ipv6})" | tee -a "${log_file}"
exit 0
else
echo "${DATE}: only IPV6 changed (${ipv6})" | tee -a "${log_file}"
fi
fi
echo "${DATE}: detected new IP: ${old_ipv4} -> ${ipv4}" | tee -a "${log_file}"
echo "${DATE}: detected new IP: ${old_ipv6} -> ${ipv6}" | tee -a "${log_file}"
echo "${ipv4}" > "${ip_file}"
echo "${ipv6}" >> "${ip_file}"
echo "${DATE}: wrote new IPs to ${ip_file}" | tee -a "${log_file}"
response=$(curl -su "${HOST_NAME}:${UPDATE_TOKEN}" "${UPDATE_URL}?hostname=${HOST_NAME}&myip=${ipv4},${ipv6}")
echo "${DATE}: response: ${response}" | tee -a "${log_file}"
@Holzkohlen
Copy link
Author

added support for updating ipv6 in addition to ipv4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment