Skip to main content

DynDNS Updater (Debian / 10.07.2024)

Der DynDNS Updater aktualisiert eine Domain mit der aktuellen IP-Adresse.

 

 

Script:

user=$(whoami)
data="/home/$user/script-data/$(basename "$0")"
ippage="icanhazip.com"

	if [ ! -d "$data" ]; then
		mkdir -p "$data"
	fi

	if [ ! -d "$data/logs" ]; then
		mkdir "$data/logs"
	fi


function ipcheck {
	echo "$(date +"[%d.%m.%Y %H:%M:%S]")"

	if [ -f "$data/ip.txt" ]; then
		ip=$(head -n1 "$data/ip.txt")
		echo "Bisherige IP: $ip"
	else
		echo "Erste Ausführung."
		ip=""
		echo "$(date +"%d.%m.%Y;%H:%M:%S");Erste Ausführung;$1" >> "$data/logs/allgemein.csv"
	fi

	if [ -f "$data/updateurl.txt" ]; then
		updateurl=$(sed 's/ //g' "$data/updateurl.txt" | head -n1 | tail -n1)
	else
		echo "Keine Update-URL hinterlegt. URL hier einfügen:"
		echo "$(date +"%d.%m.%Y;%H:%M:%S");Update-URL fehlt" >> "$data/logs/allgemein.csv"
		read -p "Update-URL: " updateurl

		# Überprüfe, ob die URL mit "http://" oder "https://" beginnt
		if [[ "$updateurl" =~ ^(http|https):// ]]; then
			echo "URL OK."
			echo "$updateurl" > "$data/updateurl.txt"
			echo "$(date +"%d.%m.%Y;%H:%M:%S");Update-URL hinterlegt;$1" >> "$data/logs/allgemein.csv"
		else
			echo "Die URL ist ungültig."
			echo "$(date +"%d.%m.%Y;%H:%M:%S");Update-URL ungültig;$1" >> "$data/logs/allgemein.csv"
			exit 1
		fi
	fi

	echo "Prüfe Online-Status"
	if ping -4 -c 1 -W 3 "$ippage" >/dev/null 2>&1; then
		echo "Anschluss Online"
		ipneu=$(curl -s "$ippage")
		echo "IP: $ipneu"

		if [ "$ip" = "$ipneu" ]; then
			echo "IP unverändert."
	#		echo "$(date +"%d.%m.%Y;%H:%M:%S");IP unverändert;$1" >> "$data/logs/$(date +"%Y%m%d").csv"
		else
			echo "Bisherige IP: $ip"
			echo "Neue IP     : $ipneu"
			echo "Aktualisiere..."
			echo "$ipneu" > "$data/ip.txt"
			curl -sSL "$updateurl" >/dev/null
			echo "OK."
			echo "$(date +"%d.%m.%Y;%H:%M:%S");Aktualisiert auf $ipneu;$1" >> "$data/logs/$(date +"%Y%m%d").csv"
			echo "$(date +"[%d.%m.%Y %H:%M:%S]") IP aktualisiert auf $ipneu" | mail -s "DynDNSupdater" "mail@mariobeh.de"
		fi
	else
		echo "Client ist selbst offline, kein Aktualisieren möglich."
		echo "$(date +"%d.%m.%Y;%H:%M:%S");Client offline;$1" >> "$data/logs/$(date +"%Y%m%d").csv"
	fi
}


if [ -z "$1" ]; then
	ipcheck
fi

exit 0