Seite 3 von 3

Re: DynDNS: NO-IP

Verfasst: Do 8. Mär 2012, 16:46
von faxe2110
Jo alles da :mrgreen: nur macht er kein ip update :(

Habe mal die ip geändert bei NO-IP. Im log steht es auch drinne, nur kommt kein Update der IP :cry:
08.03.2012 14:30:15: DDNSHOST: xxx.no-ip.biz - DYNIP: 91.xx.xx.xx - CURRENTIP: 88.xxx.xxx.xxx - answer: xxxx.no-ip.biz:1
08.03.2012 16:21:57: DDNSHOST: xxx.no-ip.biz - DYNIP: 91.xx.xx.xx - CURRENTIP: 88.xxx.xxx.xxx - answer: xxxx.no-ip.biz:1
08.03.2012 16:27:10: DDNSHOST: xxx.no-ip.biz - DYNIP: 91.xx.xx.xx - CURRENTIP: 88.xxx.xxx.xxx - answer: xxxx.no-ip.biz:1
08.03.2012 16:32:22: DDNSHOST: xxx.no-ip.biz - DYNIP: 91.xx.xx.xx - CURRENTIP: 88.xxx.xxx.xxx - answer: xxxx.no-ip.biz:1
08.03.2012 16:37:35: DDNSHOST: xxx.no-ip.biz - DYNIP: 91.xx.xx.xx - CURRENTIP: 88.xxx.xxx.xxx - answer: xxxx.no-ip.biz:1
Schade hätte ja klappen können

Re: DynDNS: NO-IP

Verfasst: Do 8. Mär 2012, 16:48
von feissmaik
hast du denn auch die passende URL für NO-IP gesetzt?
da darfste nur eine stehen haben die anderen bitte auskommentieren

also meine zapto.org wird damit aktuallisiert, deshalb denk ich das du noch irgendwas falsch eingestellt hast


Wenn du oben USERNAME["1"] und PASSWORD["1"] eingetragen hast musst du dafür auch einen passenden URL["1"] Eintrag haben .. standardmässig steht bei der no-ip update url aber eine "2" drin also das evtl. noch auf eine 1 ändern sodass es dann einheitlich aussieht:

Code: Alles auswählen

USERNAME["1"]="benutzer"	# DDNS Benutzername1
PASSWORD["1"]="password"	# DDNS Passwort1
DDNSHOST["1"]="host.no-ip.biz"	# DDNS Hostname1

URL["1"]="http://dynupdate.no-ip.com/dns?username=%USER%&password=%PASS%&hostname=%HOST%"
an der URL selber brauchst du aber nichts verändern, die %USER% usw werden vom Script automatisch ersetzt und dienen hier nur als "platzhalter"

Re: DynDNS: NO-IP

Verfasst: Do 8. Mär 2012, 16:55
von faxe2110
Hmmm Sollte eigentlich:

Code: Alles auswählen

#!/bin/bash
#
# DynamicDNSupdater - supports: DynDNS.org, NO-IP.com, DYNServ.ca and IPActive.de
#
# Es koennen auch verschiedene Dienste genutzt werden um mehrere DNS-Hosts zu nutzen...
#
# Sonderzeichen im Password werden nun auch supported (danke IDDQD)
#
# credits: Didge2002, SnowHead, r00t, rj.2001, IDDQD
#
### CONFIG - START

# Zugangsdaten...
# es koennen mehrere accounts geupdated werden... (rest auskommentieren)
USERNAME["1"]="XX@XXX"	# DDNS Benutzername1
PASSWORD["1"]="XXXXXX"	# DDNS Passwort1
DDNSHOST["1"]="XXXXX.no-ip.biz"	# DDNS Hostname1

#USERNAME["2"]="benutzer2"	# DDNS Benutzername2
#PASSWORD["2"]="password2"	# DDNS Passwort2
#DDNSHOST["2"]="host2.zapto.org"	# DDNS Hostname2

#USERNAME["3"]="benutzer3"	# DDNS Benutzername3
#PASSWORD["3"]="password3"	# DDNS Passwort3
#DDNSHOST["3"]="host3.dyndns.org"	# DDNS Hostname3
#

# Provider URL's - pro DDNSHOST muss wie oben ein dazu passendes URL["<zahl>"] angelegt werden!
# (beliebig erweiterbar)
#
# $USERNAME , $PASSWORD , $DDNSHOST werden innerhalb der URL mit %USER% , %PASS% , %HOST% angegeben!
#
#URL["1"]="http://%USER%:%PASS%@members.dyndns.org/nic/update?hostname=%HOST%"
URL["2"]="http://dynupdate.no-ip.com/dns?username=%USER%&password=%PASS%&hostname=%HOST%"
#URL["3"]="http://%USER%:%PASS%@members.dyndns.org/nic/update?hostname=%HOST%"
#
# BEISPIEL URL's
#
# DynDNS.org:		"http://%USER%:%PASS%@members.dyndns.org/nic/update?hostname=%HOST%"
# No-IP.com:		"http://dynupdate.no-ip.com/dns?username=%USER%&password=%PASS%&hostname=%HOST%"
# DYNServ.ca:		"http://dynserv.ca/dyn/dynengine.cgi?name=%USER%&pass=%PASS%&func=set&domain=%HOST%"
# IPActive.de:	"http://logon.ipactive.de/cgi-bin/logon_off.pl?V=2.1&B=%USER%&P=%PASS%&IP=%HOST%&F=1"

EVERY="300"		# Zeit in Sekunden zwischen den Abfragen
LOG="1"			# Erstelle Logfile hiervon? [0=nein; 1=ja]

# Verschicke EMail bei Problemen? [no=nein; yes=ja]
# ( benoetigt: apt-get install sendEmail )
EMAIL="no"
EMAILFROM="`hostname`@fqdn.net"
EMAILTO='admin@fqdn.net'
EMAILSERVER='mail.fqdn.net'
EMAILUSER=''
EMAILPASS=''


### CONFIG - END

# -------------------------------------------------------------- #
# >>> >> >  DO NOT MESS WiTH ANYTHiNG BELOW THiS LiNE!  < << <<< #
# -------------------------------------------------------------- #


# required system cmd's:
# basename cat cut date echo expr killall ping rm sed sleep wget  


Osrcn="DDNSupdater.sh"
srcn=$(basename $0)
srcv="1.093"
srccfg="config.$Osrcn"
LOGFILE="/var/log/log.$Osrcn"
CHKFILE="/tmp/.$Osrcn"
PiDFILE="/tmp/.pid.$Osrcn"
OnlinePing="google.de"
ProfileSwitchSleep=2
IPCcfgdir="/var/emu/conf"
IPCfunctions="/var/emu/script/functions.sh"
IPCddnssrc="/var/emu/script/$Osrcn"
IPCddnslinkname="ddns"


C="\033[";Ca="${C}0;33m";Cb="${C}1;33m";Cn="${C}0m";ROT="${C}1;31m";GRUEN="${C}1;32m";BOLD="${C}1;37m"
Bo="${C}1m";Bc="${C}21m"; Ro="${C}3m";Rc="${C}23m"; Uo="${C}4m";Uc="${C}24m"
Blo="${C}5m";Blc="${C}25m"; Io="${C}7m";Ic="${C}27m"


if [ -f "$IPCfunctions" -a ! -f "$IPCddnssrc" ]; then
	echo ".. $srcn v$srcv .."
	echo "Erstbenutzung dieses Scripts? IPC erkannt... kopiere Script $srcn..."
	cp -f $0 $IPCddnssrc ; chmod 755 $IPCddnssrc >/dev/null 2>&1
#	if [ -f "/sbin/$IPCddnslinkname" ]; then
#		LinksCount=$(ls /sbin/${IPCddnslinkname}* | wc -l)
#			((++LinksCount))
#	IPCddnslinkname="ddns$LinksCount"
#	fi
	echo -e "\nErstelle Symlink fuer ${Ro}$IPCddnslinkname${Rc} auf $IPCddnssrc"
	ln -sf $IPCddnssrc /sbin/$IPCddnslinkname
	echo -e "Nun muss noch der ${Ro}CONFIG${Rc} Abschnitt in dem Script $srcn angepasst werden!"
	sleep 3
	nano -R $IPCddnssrc
	#[ ! -f "$IPCcfgdir/$srccfg" ] && proc_Create_Script_CFG "$IPCcfgdir/$srccfg"
	echo -e "Fertig! Das Script kann kuenftig ueber den Befehl ${Ro}$IPCddnslinkname${Rc} ausgefuehrt werden"
	$IPCddnssrc help
	exit
fi

# load script config?
[ -d "$IPCcfgdir" -a -f "$IPCcfgdir/$srccfg" ] && source $IPCcfgdir/$srccfg
[ ! -d "$IPCcfgdir" -a -f "$srccfg" ] && source $srccfg


# Verschicke EMail..
function send_EMail() {
	MESSAGE=$1
	SUBJECT="$Osrcn Problem"
	if [ $EMAIL = "yes" ]; then
		echo "Verschicke EMail.."
		sendEmail -f $EMAILFROM -t $EMAILTO -u "$SUBJECT" -m "$MESSAGE" -s $EMAILSERVER -xu "$EMAILUSER" -xp "$EMAILPASS"
	fi
}

# Simple URL encoding
function proc_url_encode() {
	out=${1//%/%25}; out=${out//\{/%7B}; out=${out//\}/%7D}; out=${out//|/%7C};
	out=${out//\\/%5C}; out=${out//^/%5E}; out=${out//~/%7E}; out=${out//[/%5B};
	out=${out//]/%5D}; out=${out//\`/%60}; out=${out//#/%23}; out=${out//>/%3E};
	out=${out//\$/%24}; out=${out//&/%26}; out=${out//+/%2B}; out=${out//,/%2C};
	out=${out//\//%2F}; out=${out//:/%3A}; out=${out//;/%3B}; out=${out//=/%3B};
	out=${out//\?/%3F}; out=${out// /%20}; out=${out//</%3C};
	echo $out
}

function LOG_msg() {
	message=$1
	if [ $LOG = "1" ]; then
		_DT=$(date +"%d.%m.%Y %H:%M:%S")
		echo "$_DT: $message" >> $LOGFILE
	fi
}


# fuer jedes "profil" (DDNSHOST) die jeweilige "action" abarbeiten (function-names)
function check_profils() {
	ACTION=$1
	for index in ${!DDNSHOST[*]}; do
		eRROR=""
		# get current ddnshost-ip and internet-ip...
		get_IPs "$index"
		if [ -z "$eRROR" ]&&[ "$DYNIP" != "$CURRENTIP" ]; then
			# for each $ACTION...
			if [ ! -z "$ACTION" ]; then
				for actionfunction in $ACTION; do
					$actionfunction "$index"
				done
			fi
		fi
		[ ! -z "$eRROR" ] && echo "$eRROR" && send_EMail "eRROR"
		sleep $ProfileSwitchSleep
	done
}

function abuse_check() {
	index=$1
	answer=$(cat ${CHKFILE}_answer)
	MSG=""
	if [ "$answer" = "abuse" ]; then
		MSG="WARNING!! You abused the DNS update function! You must Unlock your hostname: ${DDNSHOST[$index]} !"
	fi
	[ "$answer" = "nohost" ] && MSG="ERROR: Unknown host ${DDNSHOST[$index]} !"
	[ "$answer" = "badauth" ] && MSG="ERROR: Bad auth! Check USERNAME and PASSWORD setting for ${DDNSHOST[$index]} !"
	if [ ! -z "$MSG" ]; then
		echo "$MSG"
		LOG_msg "$MSG"
		send_EMail "$MSG"
	fi
}

function get_IPs() {
	index=$1
	# get current dyndns host ip
	DYNIP=$(ping -c 1 "${DDNSHOST[$index]}" | sed -n 1p | sed -e 's/(//g' -e 's/)//g' | cut -d " " -f3 | sed -e 's/\://g')
	[ -z "$DYNIP" ]&& eRROR="Cant get IP of DDNSHOST: ${DDNSHOST[$index]}"
	# get current internet ip
	CURRENTIP=$(wget -q -O - http://myip.dnsomatic.com/)
	if [ -z "$CURRENTIP" -o "$CURRENTIP" = " *" -o "$CURRENTIP" = "*1.0 *" ]; then
		CURRENTIP=$(wget -q -O - http://www.whatismyip.org/)
	fi
	if [ -z "$CURRENTIP" -o "$CURRENTIP" = " *" -o "$CURRENTIP" = "*1.0 *" ]; then
		CURRENTIP=$(wget -q -O - http://checkip.dyndns.org | grep IP | expr \`awk '{print $6}'\` : '\([0-9.]*\)')
	fi
	if [ -z "$CURRENTIP" -o "$CURRENTIP" = " *" -o "$CURRENTIP" = "*1.0 *" ]; then
		CURRENTIP=$(wget -q -O - http://checkip.dyndns.org/ | grep "IP Address" | cut -d ' ' -f 6 | cut -d '<' -f 1)
	fi
	if [ -z "$CURRENTIP" -o "$CURRENTIP" = " *" -o "$CURRENTIP" = "*1.0 *" ]; then
		CURRENTIP=$(wget -q -O - http://www.myip.ch/ | grep "IP Address" | cut -d ' ' -f4 | sed -e 's/\$//g' -e 's/\\r//g')
	fi
	[ -z "$CURRENTIP" ] && eRROR="Cant catch current internet ip"
	#CURRENTIP=$(echo $CURRENTIP | sed -e 's/\://g' -e 's/\$//g' -e 's/\\r//g')
}

function do_update() {
	index=$1
	# Replace %USER% , %PASS% , %HOST%
	URL=${URL[$index]}
	URL=${URL//%USER%/`proc_url_encode "${USERNAME[$index]}"`}
	URL=${URL//%PASS%/`proc_url_encode "${PASSWORD[$index]}"`}
	URL=${URL//%HOST%/${DDNSHOST[$index]}}
	wget -q -O ${CHKFILE}_answer $URL
	answer=$(cat ${CHKFILE}_answer)
	echo "DDNSHOST: ${DDNSHOST[$index]} - DYNIP: $DYNIP - CURRENTIP: $CURRENTIP - answer: $answer"
	LOG_msg "DDNSHOST: ${DDNSHOST[$index]} - DYNIP: $DYNIP - CURRENTIP: $CURRENTIP - answer: $answer"
}

function update_interval() {
	PiDs="$$ $!"
	echo $PiDs > $PiDFILE
	echo "Running Script in Background with PID(s): $PiDs"
	while true; do
		[ ! -f "$PiDFILE" ] && echo "$srcn: Interval stopped" && break
		# check if online...
		ONLINE=0
		[ "$(ping -c1 "$OnlinePing" | grep -c "seq")" -eq 1 ] && ONLINE=1
		# if online, check each DDNSHOST (array)...
		[ "$ONLINE" ] && check_profils "do_update abuse_check"
		sleep $EVERY
	done
}

function show_status() {
	for index in ${!DDNSHOST[*]}; do
		get_IPs "$index"
		if [ "$DYNIP" != "$CURRENTIP" ]; then
			echo "The IP of ${DDNSHOST[$index]} ($DYNIP) does NOT match your current Internet-IP: $CURRENTIP"
			echo "You should update immediately! (with: $0 now)"
		else
			echo "Your host ${DDNSHOST[$index]} with IP $DYNIP is still up to date: $CURRENTIP"
			if [ -f "${CHKFILE}_answer" ]; then
				answer=$(cat ${CHKFILE}_answer)
				echo "Last Answer was: $answer"
			fi
		fi
		echo " "
	done
	[ -f "$PiDFILE" ] && echo "Script seems to run in background with PID(s): $(cat $PiDFILE)"
}

function kill_script() {
	counter="5"
	[ -f "$PiDFILE" ] && PID=$(cat $PiDFILE)
	[ -z "$PID" ] && PID="$$ $!"
	echo "PID(s): $PID"
	echo -n "Stopping Script"
	if [ ! -z "$PID" ]; then
		if ( kill -TERM $PID 2> /dev/null ); then
			c=1
			while [ "$c" -le 300 ]; do
				if ( kill -0 $PID 2> /dev/null ); then
					echo -n "."
					sleep 1
				else
					break
				fi
				c=$((++c)) 
			done
		fi
		if ( kill -0 $PID 2> /dev/null ); then
			echo -e "\rScript is not shutting down cleanly - killing"
			kill -KILL $PID
		else
			echo " done"
		fi
		#for P in $PID; do
		#	kill -9 $P >/dev/null 2>&1
		#	echo "Killed PID $P"
		#done
	else
		echo "Nothing to $1!"
	fi
	rm -f $PiDFILE
}

function echo_PIDs() {
	[ -f "$PiDFILE" ] && PID=$(cat $PiDFILE)
	[ -z "$PID" ] && PID="$$ $!"
	if [ -z "$PID" ]; then
		echo "Seems script isnt running in background"
	else
		echo "Scripts currently ProcessIDs: $PID"
	fi
}


if [ -f "$IPCfunctions" -a -f "$IPCddnssrc" ]; then
	linkname=$IPCddnslinkname
else
	linkname=$0
fi

case "$1" in
	"")
		update_interval
	;;
	[aA][uU][tT][oO]|[sS][tT][aA][rR][tT])
		bash $0 &
	;;
	[kK][iI][lL][lL]|[sS][tT][oO][pP])
		kill_script $1
	;;
	[nN][oO][wW])
		check_profils "do_update abuse_check"
	;;
	[pP][iI][dD]*)
		echo_PIDs
	;;
	[sS][tT][aA][tT][uU][sS])
		show_status
	;;
	[hH][eE][lL][pP]|[hH][iI][lL][fF][eE]|?)
		echo "Usage: $linkname [now|auto|kill|status|pid|help]"
		echo "$linkname now -> Force to update $DDNSHOST immediately (Sofortiges updaten von $DDNSHOST)"
		echo "$linkname auto -> Checks/updates $DDNSHOST every $EVERY seconds (Ueberprueft/updated $DDNSHOST alle $EVERY Sekunden)"
		echo "$linkname kill -> Kills running script (Script wird beendet)"
		echo "$linkname status -> Zeigt den aktuellen Status, ob ein update noetig ist"
		echo "$linkname pid -> Zeigt die verwendeten ProzessIDs dieses Scripts"
		echo "$linkname help -> This help... (Zeigt diese Hilfe...)"
	;;
	*)
		echo "Usage: $linkname [now|auto|kill|status|pid|help]"
	;;
esac

exit 0

Re: DynDNS: NO-IP

Verfasst: Do 8. Mär 2012, 16:57
von feissmaik
hehe ne genau das was ich vermutet habe - du hast bei deiner URL eine 2 drin stehen für das 2 Profil was bei dir aber garnicht existiert ;)

Re: DynDNS: NO-IP

Verfasst: Do 8. Mär 2012, 17:04
von faxe2110
Jo geändert und ES KLAPPT !!!! :mrgreen:

Super vielen herzlichen Dank für deine Mühe und Ausdauer mit mir.

Faxe2110

Re: DynDNS: NO-IP

Verfasst: Do 8. Mär 2012, 17:05
von feissmaik
null problemo :geek:

Re: DynDNS: NO-IP

Verfasst: Do 8. Mär 2012, 19:29
von szonic
feissmaik hat geschrieben:@szonic: hatte ich ehrlich gesagt noch keine lust zu das irgendwie zu entwurschteln - hab den Thread aber oben angepinnt das er nicht unter geht

über i os sind auch beide Scripts verfügbar
PERFEKT! :)

Re: DynDNS: NO-IP

Verfasst: Do 8. Mär 2012, 19:46
von faxe2110
Habe dochnoch eine klitze kleine Frage. Ich habe eine Mail Adresse mit Domain. Wie schaffe ich es diese in dem Script einzubinden ?? SendMail hat ja anscheind probleme mit Googlemail !!!!!!


http://ipc.pebkac.at/forum/viewtopic.php?f=2&t=461