Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

IPC DDNSupdater.sh

    Nobody is reading this thread right now.
AW: IPC DDNSupdater.sh

Genau das denk ich auch, er hat nicht die Rechte, die veränderte Datei zu speichern
 
AW: IPC DDNSupdater.sh

die Rechte stehen auf 777

und muß das so sein ?
Code:
DDNSHOST="Otto.dyndns.org"

oder so ?
Code:
DDNSHOST="dyndns.org"
 
AW: IPC DDNSupdater.sh

ja dyndns.org ist nur die frage muß das Otto. vor dem dyndns.org

er speichert auch, aber wenn ich

DDNSupdater.sh now mach ist alles weg was ich an Daten eingegeben hab ohne den befehl
ist alles da komisch
 
AW: IPC DDNSupdater.sh

na klar muss deine definierte Subdomain zu dyndns.org hinzugefügt werden, ... das Script kann es nicht schmecken ...
 
AW: IPC DDNSupdater.sh

so wie ich den befehl

Code:
[B]DDNSupdater.sh now[/B]

eingebe ist alles was ich gespeichert hab weg was ist das ?
 
AW: IPC DDNSupdater.sh

was da komisch ist das alle Gespeicherten Daten weg sind
so wie ich den Befehl eingebe:

Code:
DDNSupdater.sh now

da nach ist der Benutzername weg das Password weg und derHost weg
das ist komisch
 
AW: IPC DDNSupdater.sh

@ TV Pirat
nimm mal WinSCP hatte mit Putty auch schon probleme mit speichern.

@ TommyH99
wer wird denn gleich so... sein, dafür ist ein Board da, wenn es Probleme gibt.
 
AW: IPC DDNSupdater.sh

wenn ich den Befehl eingebe

Code:
DDNSupdater.sh now

kommt das hier:

Code:
Lade Script: DDNSupdater.sh now
ERROR: Bad auth ! Check Username and Password setting!
HOST: host.ath.cx - HOSTIP: xx.xxx.xx.xxx - CURRENTIP: xx.xxx.xx.xxx
Answer: badauth

und alle gespeicherten Daten sind weg.
 
AW: IPC DDNSupdater.sh

Du nutzt eine seeehr alte Version, ich habe mit @feissmaik noch ein paar updates "erforscht", die aktuelle Version kann auch Mails versenden, gibt ein paar mehr Daten an, kann mehrere Adresse verwalten, etc.

Aktuell ist die Version 1.093!

Code:
#!/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"]="LoginvonDynanbieter"	# DDNS Benutzername1
PASSWORD["1"]="PassvonDynanbieter"	# DDNS Passwort1
DDNSHOST["1"]="eigentliche dynadresse"	# DDNS Hostname1

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

#USERNAME["3"]="user"	# DDNS Benutzername3
#PASSWORD["3"]="pass"	# DDNS Passwort3
#DDNSHOST["3"]="dynadresse"	# 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="60"		# 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="yes"
EMAILFROM="absenderadresse"
EMAILTO='Empfängeradresse'
EMAILSERVER='selsterklärend'
EMAILUSER='Emailuser'
EMAILPASS='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 - [url="http://myip.dnsomatic.com/"]http://myip.dnsomatic.com/[/url])
	if [ -z "$CURRENTIP" -o "$CURRENTIP" = " *" -o "$CURRENTIP" = "*1.0 *" ]; then
		CURRENTIP=$(wget -q -O - [url="http://www.whatismyip.org/"]http://www.whatismyip.org/[/url])
	fi
	if [ -z "$CURRENTIP" -o "$CURRENTIP" = " *" -o "$CURRENTIP" = "*1.0 *" ]; then
		CURRENTIP=$(wget -q -O - [url="http://checkip.dyndns.org"]Current IP Check[/url] | grep IP | expr \`awk '{print $6}'\` : '\([0-9.]*\)')
	fi
	if [ -z "$CURRENTIP" -o "$CURRENTIP" = " *" -o "$CURRENTIP" = "*1.0 *" ]; then
		CURRENTIP=$(wget -q -O - [url="http://checkip.dyndns.org/"]Current IP Check[/url] | 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 - [url="http://www.myip.ch/"]Current IP Check[/url] | 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"
	send_EMail "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"
			send_EMail "DDNSHOST: ${DDNSHOST[$index]} - DYNIP: $DYNIP - CURRENTIP: $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

Das Script liegt hier, wo alle scripte liegen:
/var/emu/script/DDNSupdater.sh

Symlink ist hier:
/bin/ddns

In der rc.local noch dieser Eintrag falls Du mal den Server neustarten mußt:
#DDNSupdater starten
/bin/ddns start &

Thats it und rennt fantastisch!

Ich update damit 2 dynadressen seit einiger Zeit absolut fehlerfrei!

Grüsse
szonic
 
Zuletzt bearbeitet:
Zurück
Oben