getting close - UD script is working
This commit is contained in:
22
ddns.sh
Executable file
22
ddns.sh
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
DOMAIN="geek-blog.de"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SCRIPTPATH="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
|
||||||
|
|
||||||
|
WAN_IP=$(${SCRIPTPATH}/easyBoxCtrl.sh wan ip 2>/dev/null)
|
||||||
|
echo "Current WAN-IP -----------> ${WAN_IP}"
|
||||||
|
|
||||||
|
DNS_IP=$(dig +short ${DOMAIN})
|
||||||
|
echo "Current DNS entry for ----> ${DNS_IP}"
|
||||||
|
|
||||||
|
if [ "${WAN_IP}" == "${DNS_IP}" ]; then
|
||||||
|
echo "IPs match - nothing to do."
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo "IP mismatch - trying to update A-record(s)..."
|
||||||
|
USERNAME="TODO" PASSWORD="TODO" $SCRIPTPATH/unitedDomainsCtrl.sh geek-blog.de ${WAN_IP}
|
||||||
|
USERNAME="TODO" PASSWORD="TODO" $SCRIPTPATH/unitedDomainsCtrl.sh *.geek-blog.de ${WAN_IP}
|
||||||
|
fi
|
||||||
152
unitedDomainsCtrl.sh
Executable file
152
unitedDomainsCtrl.sh
Executable file
@@ -0,0 +1,152 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# requires: wget, ca-certificates, grep, jq
|
||||||
|
#rm -f /tmp/cookies.txt
|
||||||
|
|
||||||
|
COOKIEFILE="/tmp/cookies.txt"
|
||||||
|
|
||||||
|
#USERNAME=""
|
||||||
|
#PASSWORD=""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# fake user agent
|
||||||
|
UA="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0"
|
||||||
|
|
||||||
|
# * * * NO MORE CHANGES DOWN HERE * * *
|
||||||
|
|
||||||
|
|
||||||
|
# parse parameters
|
||||||
|
DOMAIN=$(echo $1 | sed -r 's/^.*\.(.+\..+)$/\1/')
|
||||||
|
SUBDOMAIN=$(echo $1 | sed -r 's/^(.+)\..+\..+$/\1/')
|
||||||
|
|
||||||
|
if [ "$DOMAIN" == "$SUBDOMAIN" ]; then
|
||||||
|
SUBDOMAIN=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "DOMAIN=${DOMAIN}"
|
||||||
|
echo "SUBDOMAIN=${SUBDOMAIN}"
|
||||||
|
|
||||||
|
IPV4=$2
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
|
||||||
|
# GET LOGIN PAGE
|
||||||
|
#csrf tokens for login + language xmlhttprequest required to login (nice try blocking my API access, UD)
|
||||||
|
OUT=$(wget -U "$UA" \
|
||||||
|
--save-cookies $COOKIEFILE \
|
||||||
|
--keep-session-cookies \
|
||||||
|
-qO- "https://www.united-domains.de/login/")
|
||||||
|
|
||||||
|
CSRF=$(echo "$OUT" | /bin/grep -oP -m 2 "(?<=<input type=\"hidden\" name=\"csrf\" value=\")[^\"]*(?=\"( /)?>)" | tail -1)
|
||||||
|
echo "CSRF=${CSRF}"
|
||||||
|
CSRFMETA=$(echo "$OUT" | /bin/grep -oP -m 1 "(?<=<meta name=\"csrf\" content=\")[^\"]*(?=\"( /)?>)")
|
||||||
|
echo "CSRFMETA=${CSRFMETA}"
|
||||||
|
CSRFSCRIPT=$(echo "$OUT" | /bin/grep -oP -m 1 "(?<=\"CSRF_TOKEN\":\")[^\"]*(?=\")")
|
||||||
|
echo "CSRFSCRIPT=${CSRFSCRIPT}"
|
||||||
|
|
||||||
|
wget -U "$UA" \
|
||||||
|
--load-cookies $COOKIEFILE \
|
||||||
|
--save-cookies $COOKIEFILE \
|
||||||
|
--keep-session-cookies \
|
||||||
|
--delete-after \
|
||||||
|
--post-data "language=en-US" \
|
||||||
|
--header="HTTP-X-CSRF-TOKEN: $CSRFMETA" \
|
||||||
|
--header="X-Csrf-Token: $CSRFSCRIPT" \
|
||||||
|
--header="X-Requested-With: XMLHttpRequest" \
|
||||||
|
-qO- "https://www.united-domains.de/set-user-language"
|
||||||
|
|
||||||
|
|
||||||
|
# DO THE LOGIN
|
||||||
|
echo 'login'
|
||||||
|
OUT=$(wget -U "$UA" \
|
||||||
|
--load-cookies $COOKIEFILE \
|
||||||
|
--save-cookies $COOKIEFILE \
|
||||||
|
--keep-session-cookies \
|
||||||
|
--post-data "csrf=$CSRF&email=$USERNAME&pwd=$PASSWORD&selector=login&loginBtn=Login" \
|
||||||
|
-qO- "https://www.united-domains.de/login/")
|
||||||
|
|
||||||
|
####################################################################################################
|
||||||
|
# WE'RE IN
|
||||||
|
|
||||||
|
# get domain list in order to determine the DOMAIN_ID for the given DOMAIN
|
||||||
|
echo 'get domain list'
|
||||||
|
OUT=$(wget -U "$UA" \
|
||||||
|
--load-cookies $COOKIEFILE \
|
||||||
|
--save-cookies $COOKIEFILE \
|
||||||
|
--keep-session-cookies \
|
||||||
|
-qO- 'https://www.united-domains.de/pfapi/dns/domain-list')
|
||||||
|
if [ "$OUT" = "" ] ; then
|
||||||
|
echo "Login not successful"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
# parse output for the DOMAIN_ID
|
||||||
|
DOMAIN_ID=$(echo "$OUT" | jq -cM --arg v "${DOMAIN}" '.data[] | select(.domain == $v) | .id')
|
||||||
|
echo "DOMAIN_ID=${DOMAIN_ID}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
#get current dns record json object & modify ip
|
||||||
|
echo "get current dns record json object"
|
||||||
|
current=$(wget -U " $UA" \
|
||||||
|
--load-cookies $COOKIEFILE \
|
||||||
|
--save-cookies $COOKIEFILE \
|
||||||
|
--keep-session-cookies \
|
||||||
|
-qO- "https://www.united-domains.de/pfapi/dns/domain/$DOMAIN_ID/records")
|
||||||
|
echo "CURRENT: $current"
|
||||||
|
|
||||||
|
#record=$(echo $current |
|
||||||
|
# jq -cM ".data.A | map(select(.id == $RECORD_ID)) | .[0]" | \
|
||||||
|
# sed "s/ //g" | \
|
||||||
|
# sed "s/\"address\":\"[0-9.]\+\"/\"address\":\"$ipv4\",\"formId\":${RECORD_ID}/g")
|
||||||
|
|
||||||
|
|
||||||
|
RECORD_ID=$(echo $current | \
|
||||||
|
jq -cM --arg v "${SUBDOMAIN}" '.data.A | map(select(.sub_domain == $v)) | .[0].id')
|
||||||
|
|
||||||
|
record=$(echo $current |
|
||||||
|
jq -cM --arg v "${SUBDOMAIN}" '.data.A | map(select(.sub_domain == $v)) | .[0]' | \
|
||||||
|
sed "s/ //g" | \
|
||||||
|
sed "s/\"address\":\"[0-9.]\+\"/\"address\":\"${IPV4}\",\"formId\":${RECORD_ID}/g")
|
||||||
|
echo "NEW: $record"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# load the DNS page for the given DOMAIN_ID to get the latest csrf code
|
||||||
|
#dnspage=$(wget -U " $UA" \
|
||||||
|
# --load-cookies $COOKIEFILE \
|
||||||
|
# --save-cookies $COOKIEFILE \
|
||||||
|
# --keep-session-cookies \
|
||||||
|
# -qO- "https://www.united-domains.de/portfolio/a/domain-admin/dns/$DOMAIN_ID")
|
||||||
|
|
||||||
|
#csrfscript=$(echo "$loginpage" | /bin/grep -oP -m 1 "(?<=\"CSRF_TOKEN\":\")[^\"]*(?=\")")
|
||||||
|
#echo "csrfscript=${csrfscript}"
|
||||||
|
|
||||||
|
|
||||||
|
#send changes
|
||||||
|
echo "send changes"
|
||||||
|
#echo -ne "PUT ${url}\n${payload}\n"
|
||||||
|
|
||||||
|
PAYLOAD="{\"record\":$record,\"domain_lock_state\":{\"domain_locked\":false,\"email_locked\":false}}"
|
||||||
|
OUT=$(wget -U " $UA" \
|
||||||
|
--load-cookies $COOKIEFILE \
|
||||||
|
--save-cookies $COOKIEFILE \
|
||||||
|
--keep-session-cookies \
|
||||||
|
--method=PUT \
|
||||||
|
--header="Accept: application/json" \
|
||||||
|
--header="Accept-Encoding: gzip, deflate, br" \
|
||||||
|
--header="Accept-Language: de-DE,de;q=0.8,en-US;q=0.5,en;q=0.3" \
|
||||||
|
--header="Content-Type: application/json;charset=utf-8" \
|
||||||
|
--header="Referer: https://www.united-DOMAINs.de/portfolio/a/DOMAIN-admin/dns/$DOMAIN_ID" \
|
||||||
|
--header="Origin: https://www.united-DOMAINs.de" \
|
||||||
|
--header="Http-X-Csrf-Token: $CSRFSCRIPT" \
|
||||||
|
--body-data=$PAYLOAD \
|
||||||
|
-O- "https://www.united-domains.de/pfapi/dns/domain/$DOMAIN_ID/records" 2>&1)
|
||||||
|
echo "UD answered: $OUT"
|
||||||
|
|
||||||
|
echo $OUT | /bin/grep "$IPV4" >/dev/null 2>&1
|
||||||
|
|
||||||
|
SUCCESS=$?
|
||||||
|
echo "Retval: $SUCCESS"
|
||||||
|
|
||||||
|
exit $SUCCESS
|
||||||
Reference in New Issue
Block a user