Seite 2 von 4

Re: Script - DDNSupdater.sh

Verfasst: Mo 2. Apr 2012, 19:50
von darkjudge
Namd!

Wie sind die Einstellungen in der Vorkonfiguration für no-ip.com?

Gruß darkjudge

Re: Script - DDNSupdater.sh

Verfasst: Mo 2. Apr 2012, 20:01
von feissmaik
Steht doch im Script auch drin nur auskommentiert, oder?

Code: Alles auswählen

URL="http://dynupdate.no-ip.com/dns?username=%USER%&password=%PASS%&hostname=$DDNSHOST"
Aber am besten wärs ihr nutzt das nachfolger Script DDNSupdater2.sh was auch über i os verfügbar ist.. da stehen dann mehrere URLs drin wo auch NO-IP datei is...

Re: Script - DDNSupdater.sh

Verfasst: Mo 2. Apr 2012, 20:15
von darkjudge
Danke werde es mal probieren.................

Re: Script - DDNSupdater.sh

Verfasst: Di 3. Apr 2012, 11:26
von KingGoy
Habe eine feste IP über Unity Media und Dein script DDNSupdater2.sh eingerichtet (möchte noch No-IP nutzen). und anschliessend in die crontab eingetragen. Zuerst wollte ich es testen mit

/var/emu/script/DDNSupdater.sh now

Lief ohne jegliche Meldung durch, und es wurde trotz log=1 kein logfile erstellt (Warum diesmal Ordner /var/log statt /var/log/ipc?). Hatte vorher Benutzer 2 und 3 rausgeixt und die URLs 2 und 3 ebenfalls (lasse ich Nutzer 2 und 3 drinnen, wird log erstellt mit Fehlermeldung).

Wenn ich mich jetzt direkt bei DynDNS einlogge, sehe ich, dass die IP zuletzt vor 5 Tagen aktualisiert wurde.

ddns status ergibt

Your host ***.dyndns.org with IP **.153.*** is still up to date: **.153.***
Last Answer was: badauth

Script seems to run in background with PID(s): 28685

woher kommt die Antwort badauth? das logfile ist gelöscht... User, Passwort und dyndns stimmen, hab ich gecheckt. Muss ich in der URL den User/PW in die %% selber eintragen oder macht das das script?



//edit: hab es, ich muss User, PW und host selber eintragen in die %%. Ist das so gewollt? Funktionieren in den %% keine Variablen?

Re: Script - DDNSupdater.sh

Verfasst: Di 3. Apr 2012, 11:44
von feissmaik
wo das log gespeichert wird kannst du selber einstellen - deswegen sind es variablen und nicht hardcoded... in /var/log weil es keine cam is, in /var/log/ipc/ liegen nämlich eigentlich nur die cam logs aber jeder wie er mag...

ein Log hätte aber geschrieben werden müssen... es sei denn es trat ein fehler auf? in jedem fall hätte er was auswerfen müssen, wenn garnix kam (ohne jegliche meldung) funktioniert irgendwas nicht....
bei "now" führt er die function "do_update" aus und wenn du dir mal anguckst steht ganz am ende ein echo und ein "LOG_msg" und die function LOG_msg wiederum guckt ob $LOG = 1 und wenn das der fall is wird ins logfile geschrieben...

"rausgeixt" ? wenn dann auskommentieren!! ( # )

beachte bitte das es im DDNSupdater2.sh sog. Profile gibt, jede Zahl ist ein Profil, also zu einer DDNSHOST["2"] muss es auch einen passenden USERNAME["2"] und PASSWORD["2"] geben und natürlich auch eine URL["2"] ... gibt es irgendeins davon nicht kommt natürlich ein fehler


Last Answer was: badauth ... dann passen deine Zugangsdaten nicht - diese meldung wird von dem jeweiligen dienst beim "do_update" zurück gegeben und in der function "abuse_check" geprüft .. die antwort wird in dem file /tmp/.DDNSupdater.sh_answer gespeichert


/EDIT: nein die musst du NICHT selber eintragen! Das sind absichtlich platzhalter die weiter unten im script automatisch ersetzt werden! das sind auch keine variablen!

Code: Alles auswählen

	URL=${URL//%USER%/`proc_url_encode "${USERNAME[$index]}"`}
	URL=${URL//%PASS%/`proc_url_encode "${PASSWORD[$index]}"`}
	URL=${URL//%HOST%/${DDNSHOST[$index]}}
wenn dann müsste jetzt irgendwas mit der function proc_url_encode nicht in ordnung sein, bitte verrate mir mal welche scriptversion du hast

Re: Script - DDNSupdater.sh

Verfasst: Di 3. Apr 2012, 19:32
von KingGoy
also mit rausgeixt war natürlich auskommentiert gemeint, sorry für meine laxe Ausdrucksweise.

Das Script war Version 2.0, da hatte wohl was nicht funktioniert. Ich verwende jetzt Version 2.01, da wird upgedatet. Allerdings wird immer noch kein log geschrieben.

Wenn ich das richtig überblicke, wird ja immer ins logfile geschrieben (echo "$_DT: $message" >> $LOGFILE), aber es gibt keins. hmmm...

Re: Script - DDNSupdater.sh

Verfasst: Mi 4. Apr 2012, 05:30
von feissmaik
bei version 2.0 zu 2.01 hat sich nur die function proc_url_encode verändert indem ein paar mehr sonderzeichen dazu gekommen sind also wunderts mich jetzt ein bischen das es angeblich beim manuellen eintragen in die url funktioniert haben soll - gerade die sonderzeichen machen eigentlich wenn dann erst probleme
Spoiler
Show
v2.0

Code: Alles auswählen

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
}
v2.01

Code: Alles auswählen

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};
	out=${out//\!/%21}; out=${out//\"/%22}; out=${out//\@/%40}; out=${out//\'/%27};
	out=${out//\(/%28}; out=${out//\)/%29}; out=${out//\*/%2A}; out=${out//\-/%2D};
	out=${out//\_/%5F}; out=${out//\./%2E}; out=${out//\€/%80};
	echo $out
}
"echo "$_DT: $message" >> $LOGFILE" wird nicht immer gemacht - das steht innerhalb einer if-schleife dessen bedingung erst erfüllt sein muss und das is eben $LOG = "1"

Code: Alles auswählen

function LOG_msg() {
	message=$1
	if [ $LOG = "1" ]; then
		_DT=$(date +"%d.%m.%Y %H:%M:%S")
		echo "$_DT: $message" >> $LOGFILE
	fi
}
aber das er absolut garnichts auswirft kann wie gesagt eigentlich nicht sein weil vor dem aufrufen von LOG_msg auch ein normales echo steht

Code: Alles auswählen

	echo "DDNSHOST: ${DDNSHOST[$index]} - DYNIP: $DYNIP - CURRENTIP: $CURRENTIP - answer: $answer"
	LOG_msg "DDNSHOST: ${DDNSHOST[$index]} - DYNIP: $DYNIP - CURRENTIP: $CURRENTIP - answer: $answer"
wenn es da bereits ein problem gibt müsste aber zumindest eine fehlermeldung ausgeworfen werden...

ruf mal bitte das script im debug modus auf und poste ggf die ausgabe, dann siehst du was er macht

bash -x /var/emu/script/DDNSupdater2.sh now

Re: Script - DDNSupdater.sh

Verfasst: Mi 4. Apr 2012, 10:10
von KingGoy
toller Tipp, das mit bash -x wusste ich nicht, macht vieles leichter :-). Log wird immer noch keines erstellt. Gerade habe ich das script manuell aufgerufen mit /var/emu/script/DDNSupdater.sh now -- und es wurde auch nicht upgedatet auf Dyndns.com -- seltsam. Hier die Ausgabe mit bash -x:

Code: Alles auswählen

+ USERNAME["1"]=***
+ PASSWORD["1"]=***
+ DDNSHOST["1"]=***.dyndns.org
+ URL["1"]='http://%USER%:%PASS%@members.dyndns.org/nic/update?hostname=%HOST%'
+ EVERY=90
+ LOG=1
+ EMAIL=no
++ hostname
+ EMAILFROM=oscam@fqdn.net
+ EMAILTO=admin@fqdn.net
+ EMAILSERVER=mail.fqdn.net
+ EMAILUSER=
+ EMAILPASS=
+ Osrcn=DDNSupdater.sh
++ basename /var/emu/script/DDNSupdater.sh
+ srcn=DDNSupdater.sh
+ srcv=2.01
+ srccfg=config.DDNSupdater.sh
+ LOGFILE=/var/log/ipc/log.DDNSupdater.sh
+ CHKFILE=/tmp/.DDNSupdater.sh
+ PiDFILE=/tmp/.pid.DDNSupdater.sh
+ OnlinePing=google.de
+ ProfileSwitchSleep=2
+ IPCcfgdir=/var/emu/conf
+ IPCfunctions=/var/emu/script/functions.sh
+ IPCddnssrc=/var/emu/script/DDNSupdater.sh
+ IPCddnslinkname=ddns
+ C='\033['
+ Ca='\033[0;33m'
+ Cb='\033[1;33m'
+ Cn='\033[0m'
+ ROT='\033[1;31m'
+ GRUEN='\033[1;32m'
+ BOLD='\033[1;37m'
+ Bo='\033[1m'
+ Bc='\033[21m'
+ Ro='\033[3m'
+ Rc='\033[23m'
+ Uo='\033[4m'
+ Uc='\033[24m'
+ Blo='\033[5m'
+ Blc='\033[25m'
+ Io='\033[7m'
+ Ic='\033[27m'
+ '[' -f /var/emu/script/functions.sh -a '!' -f /var/emu/script/DDNSupdater.sh ']'
+ '[' -d /var/emu/conf -a -f /var/emu/conf/config.DDNSupdater.sh ']'
+ '[' '!' -d /var/emu/conf -a -f config.DDNSupdater.sh ']'
+ '[' -f /var/emu/script/functions.sh -a -f /var/emu/script/DDNSupdater.sh ']'
+ linkname=ddns
+ case "$1" in
+ check_profils 'do_update abuse_check'
+ ACTION='do_update abuse_check'
+ for index in '${!DDNSHOST[*]}'
+ eRROR=
+ get_IPs 1
+ index=1
++ cut -d ' ' -f3
++ sed -e 's/(//g' -e 's/)//g'
++ sed -e 's/\://g'
++ sed -n 1p
++ ping -c 1 ***.dyndns.org
+ DYNIP=***
+ '[' -z *** ']'
++ wget -q -O - http://myip.dnsomatic.com/
+ CURRENTIP=88.153.152.x
+ '[' -z *** -o *** = ' *' -o *** = '*1.0 *' ']'
+ '[' -z ***-o *** = ' *' -o *** = '*1.0 *' ']'
+ '[' -z ***-o *** = ' *' -o *** = '*1.0 *' ']'
+ '[' -z *** -o *** = ' *' -o *** = '*1.0 *' ']'
+ '[' -z *** ']'
+ '[' -z '' ']'
+ '[' *** '!=' *** ']'
+ '[' '!' -z '' ']'
+ sleep 2
+ exit 0
Habe gerade mal folgende url verwendet:

Code: Alles auswählen

#URL["1"]="http://%USER%:%PASS%@members.dyndns.org/nic/update?hostname=%HOST%"
URL["1"]="http://%***%:%***%@members.dyndns.org/nic/update?hostname=%***.dyndns.org%"
und da wurde upgedatet, hier die Ausgabe:

Code: Alles auswählen

bash -x /var/emu/script/DDNSupdater.sh now
+ USERNAME["1"]=***
+ PASSWORD["1"]=***
+ DDNSHOST["1"]=***.dyndns.org
+ URL["1"]='http://%***%:%***%@members.dyndns.org/nic/update?hostname=%***.dyndns.org%'
+ EVERY=90
+ LOG=1
+ EMAIL=no
++ hostname
+ EMAILFROM=oscam@fqdn.net
+ EMAILTO=admin@fqdn.net
+ EMAILSERVER=mail.fqdn.net
+ EMAILUSER=
+ EMAILPASS=
+ Osrcn=DDNSupdater.sh
++ basename /var/emu/script/DDNSupdater.sh
+ srcn=DDNSupdater.sh
+ srcv=2.01
+ srccfg=config.DDNSupdater.sh
+ LOGFILE=/var/log/ipc/log.DDNSupdater.sh
+ CHKFILE=/tmp/.DDNSupdater.sh
+ PiDFILE=/tmp/.pid.DDNSupdater.sh
+ OnlinePing=google.de
+ ProfileSwitchSleep=2
+ IPCcfgdir=/var/emu/conf
+ IPCfunctions=/var/emu/script/functions.sh
+ IPCddnssrc=/var/emu/script/DDNSupdater.sh
+ IPCddnslinkname=ddns
+ C='\033['
+ Ca='\033[0;33m'
+ Cb='\033[1;33m'
+ Cn='\033[0m'
+ ROT='\033[1;31m'
+ GRUEN='\033[1;32m'
+ BOLD='\033[1;37m'
+ Bo='\033[1m'
+ Bc='\033[21m'
+ Ro='\033[3m'
+ Rc='\033[23m'
+ Uo='\033[4m'
+ Uc='\033[24m'
+ Blo='\033[5m'
+ Blc='\033[25m'
+ Io='\033[7m'
+ Ic='\033[27m'
+ '[' -f /var/emu/script/functions.sh -a '!' -f /var/emu/script/DDNSupdater.sh ']'
+ '[' -d /var/emu/conf -a -f /var/emu/conf/config.DDNSupdater.sh ']'
+ '[' '!' -d /var/emu/conf -a -f config.DDNSupdater.sh ']'
+ '[' -f /var/emu/script/functions.sh -a -f /var/emu/script/DDNSupdater.sh ']'
+ linkname=ddns
+ case "$1" in
+ check_profils 'do_update abuse_check'
+ ACTION='do_update abuse_check'
+ for index in '${!DDNSHOST[*]}'
+ eRROR=
+ get_IPs 1
+ index=1
++ sed -e 's/(//g' -e 's/)//g'
++ cut -d ' ' -f3
++ sed -n 1p
++ sed -e 's/\://g'
++ ping -c 1 ***.dyndns.org
+ DYNIP=***
+ '[' -z *** ']'
++ wget -q -O - http://myip.dnsomatic.com/
+ CURRENTIP=***
+ '[' -z *** -o *** = ' *' -o *** = '*1.0 *' ']'
+ '[' -z ***-o *** = ' *' -o *** = '*1.0 *' ']'
+ '[' -z ***-o *** = ' *' -o *** = '*1.0 *' ']'
+ '[' -z *** -o *** = ' *' -o *** = '*1.0 *' ']'
+ '[' -z *** ']'
+ '[' -z '' ']'
+ '[' *** '!=' *** ']'
+ '[' '!' -z '' ']'
+ sleep 2
+ exit 0
Es liegt wohl wirklich daran, dass Nutzer und Passwort nicht übernommen wurden, oder wird die Anzeige unter MyHosts bei Dyndns direkt erst Minuten später aktualisiert?

Re: Script - DDNSupdater.sh

Verfasst: Mi 4. Apr 2012, 11:40
von feissmaik
mh beiden posts zufolge wird aber nirgends $out ausgeworfen oder hast du das raus gecutted?

check_profils 'do_update abuse_check' ... hätte er machen sollen aber dessen output fehlt in deinen postings


btw: wenn du %USER% , %PASS% und %HOST% in der URL ersetzt musst du auch die % wegnehmen...

Re: Script - DDNSupdater.sh

Verfasst: Mi 4. Apr 2012, 19:21
von feissmaik
...was mir grad erst aufgefallen is, er hat bei dir nix gemacht weil er
if [ -z "$eRROR" ]&&[ "$DYNIP" != "$CURRENTIP" ]; then
daran nicht vorbei kommt... deine $DYNIP entspricht der $CURRENTIP und dann macht er eben auch kein do_update und auch kein abuse_check.... und dann schreibt er natürlich auch nix ins log weil er nix gemacht hat