Neues Script zum Setzen von Rufumleitungen

joesy23

Neuer User
Mitglied seit
10 Jun 2005
Beiträge
61
Punkte für Reaktionen
0
Punkte
6
Ich habe in den letzten Tagen ein Script zum Setzen von Rufumleitungen geschrieben. Es gibt schon verschiedene Lösungen und Möglichkeiten Rufumleitungen über die Konsole zu setzen, wie z.B. capidivert oder über AT-Befehle.

Code:
echo "ATH0" | nc 127.0.0.1 1011
echo "ATD*21*$AWS_ZIEL1*$AWS_MSN1#" | nc 127.0.0.1 1011

Aber ich hatte nichts gefunden, was meine Anforderungen komplett abdeckt. Das Script soll über cron eine zeitgesteuerte Aktivierung von Rufumleitungen ermöglichen. Vielleicht ist das auch für andere hier im Forum interessant oder kann als weitere Anregung dienen.

1. Bestehende Rufumleitugen sollen nicht verändert werden. Für eine MSN wird im WebIF immer nur ein Umleitungszeil gespeichert. Falls z.B. temporär eine Umleitung auf das Handy existiert, soll die zeitgesteuerte Umleitung auf den AB nicht durchgeführt werden.
2. Es soll zwischen Rufumleitungen für Festnetz und VOIP mit gleicher MSN (bei VOIP-Anbieter registrierte Festnetznummer) unterschieden werden können. Über die Telefoncodes setzt die FritzBox immer beide Umleitungen.
3. Nur vorhandene Rufumleitungen sollen aktiviert bzw. deaktivert werden

Für das Script ist CURL notwendig. Ausserdem müssen die Rufumleitungen über das WebIF definiert werden. Folgende 4 Parameter müssen mitgegeben werden:
1. MSN
2. Ziel der Umleitung
3. Typ (Festnetz und/oder VOIP)
4. Wert (aktivieren/deaktivieren/Status

Danke an Whoopie, dessen Skript mir als Basis diente, besonders für das neue Loginverfahren
http://www.ip-phone-forum.de/showpost.php?p=1374141&postcount=5

Hier ist das Script:
Code:
#!/bin/sh

if [ x"$1" == x"" ] || [ x"$2" == x"" ] || [ x"$3" == x"" ]  || [ x"$4" == x"" ]; then
	echo "Usage: $0 {msn} {dst} {typ} (0=Festnetz, 1=VOIP, 2=FN+VOIP) {0|1|2} (0=rul off, 1=rul on, 2=rul status)"
	exit 1
fi

msn=$1
dst=$2
typ=$3
setvalue=$4

IP=127.0.0.1
PASSWD=$(/bin/allcfgconv -C ar7 -c -o - | sed -ne '/^webui[[:space:]]*{/,/^}/{/=/{s/[[:space:]]*=[[:space:]]*/=/;s/^[[:space:]]*//;p}}' | grep '^password=' | cut -d '"' -f2)

CURL=$(which curl)

login(){
# neues Loginverfahren seit xx.04.76
if [ -e /var/html/html/login_sid.xml ];then
	#[ -f /tmp/sid ] && cgisid="$(cat /tmp/sid)"
	eval "$($CURL -s "http://$IP/cgi-bin/webcm" -d "getpage=../html/login_sid.xml" -d "sid=$cgisid" | sed -n 's,.*<\(Challenge\|iswriteaccess\|SID\)>\([^<]*\).*,\1=\2;,p')"
	if [ "$iswriteaccess" = 0 ] && [ "$SID" = "0000000000000000" -o -z "$SID" ]; then
		chksum="$(echo -n "$Challenge-$PASSWD" | sed -e 's,.,&\n,g' | tr '\n' '\0' | md5sum)"
		eval "$($CURL -s "http://$IP/cgi-bin/webcm" -d "getpage=../html/login_sid.xml" -d "login:command/response=$Challenge-${chksum%% *}" | sed -n 's,.*<SID>\(.*\)</SID>.*,SID=\1,p')"
		cgisid="$SID"
		#echo -n "$cgisid" >/tmp/sid
	fi
fi
}

rul_find(){
# Bestimmung der Zuordnung von MSN zu Festnetznummer und VOIP-Nummmer
# Bei Festnetznummern wird ein nummerischer Wert [0-9] zurückgeliefert
# Bei VOIP-Nummern wird ein Wert SIP[0-9] zurückgeliefert
#
# Mit Hilfe dieser Wert erfolgt die Bestimmung der Rufumleitungen zu der angegebenen MSN
	rulall=$($CURL \
	-s "http://$IP/cgi-bin/webcm" \
	-d "login:command/password=$PASSWD" \
	-d "sid=$cgisid" \
	-d "getpage=../html/de/menus/menu2.html" \
	-d "errorpage=../html/de/menus/menu2.html" \
	-d "var:pagename=rulall" \
	-d "var:menu=fon" ) 
	#echo -n "$rulall" >/var/tmp/rulall
	
	getmsn=$(echo "$rulall" | grep 'var g_msn' | grep $msn  | sed -n 's,.*g_msn\([0-9]\).*,\1,p')           
	#echo 'getmsn: '$getmsn     

	getsip=$(echo "$rulall" | grep 'telcfg:settings/SIP' | grep $msn  | sed -n 's,.*telcfg:settings/\(SIP[0-9]\).*,\1,p')
	#echo 'getsip: '$getsip
	
	fnmsn=$(echo "$rulall" | grep "document.write(TrRul(\"Diversity[0-9]" | grep "\"$getmsn\", \"\", \"$dst\", \"0\"" | sed -n 's,.*\(Diversity[0-9].*\)\" -->,\1,p')
	#echo 'fnmsn: '$fnmsn
	
	voipsip=$(echo "$rulall" | grep "document.write(TrRul(\"Diversity[0-9]" | grep "\"$getsip\", \"\", \"$dst\", \"0\"" | sed -n 's,.*\(Diversity[0-9].*\)\" -->,\1,p')
	#echo 'voipsip: '$voipsip 
}

rul_status(){
	if [ "$typ" = 0 ] || [ "$typ" = 2 ]; then
		if [ -n "$fnmsn" ]; then
			fnstatus=$($CURL \
			-s "http://$IP/cgi-bin/webcm" \
			-d "login:command/password=$PASSWD" \
			-d "sid=$cgisid" \
			-d "getpage=../html/de/menus/menu2.html" \
			-d "errorpage=../html/de/menus/menu2.html" \
			-d "var:pagename=rulall" \
			-d "var:menu=fon" |\
			grep "telcfg:settings/$fnmsn/Active" | sed -n 's,.*value="\([^\"]*\).*,\1,p')
	
			if [ "$fnstatus" = 0 ]; then
				echo "rul for msn $msn and dst $dst is disabled."
			else
				echo "rul for msn $msn and dst $dst is enabled."
			fi	
		fi
	fi

	if [ "$typ" = 1 ] || [ "$typ" = 2 ]; then
		if [ -n "$voipsip" ]; then
			voipstatus=$($CURL \
			-s "http://$IP/cgi-bin/webcm" \
			-d "login:command/password=$PASSWD" \
			-d "sid=$cgisid" \
			-d "getpage=../html/de/menus/menu2.html" \
			-d "errorpage=../html/de/menus/menu2.html" \
			-d "var:pagename=rulall" \
			-d "var:menu=fon" |\
			grep "telcfg:settings/$voipsip/Active" | sed -n 's,.*value="\([^\"]*\).*,\1,p')
		
			if [ "$voipstatus" = 0 ]; then
				echo "rul for sip $msn and dst $dst is disabled."
			else
				echo "rul for sip $msn and dst $dst is enabled."
			fi
		fi
	fi
}

rul_change(){
	if [ "$typ" = 0 ] || [ "$typ" = 2 ]; then
		if [ -n "$fnmsn" ]; then
			$CURL \
			-s "http://$IP/cgi-bin/webcm" \
			-d "login:command/password=$PASSWD" \
			-d "sid=$cgisid" \
			-d "getpage=../html/de/menus/menu2.html&errorpage=../html/de/menus/menu2.html&var:pagename=rulall&var:errorpagename=rulall&var:menu=fon" \
			-d "telcfg:settings/$fnmsn/Active=$setvalue" \
			1>/dev/null
		fi
	fi

	if [ "$typ" = 1 ] || [ "$typ" = 2 ]; then
		if [ -n "$voipsip" ]; then
			$CURL \
			-s "http://$IP/cgi-bin/webcm" \
			-d "login:command/password=$PASSWD" \
			-d "sid=$cgisid" \
			-d "getpage=../html/de/menus/menu2.html&errorpage=../html/de/menus/menu2.html&var:pagename=rulall&var:errorpagename=rulall&var:menu=fon" \
			-d "telcfg:settings/$voipsip/Active=$setvalue" \
			1>/dev/null
		fi
	fi
}

login

if [ x"$setvalue" != x"2" ]; then
	rul_find
	rul_change $setvalue
	rul_status
else
	rul_find
	rul_status
fi


Gruß
joesy
 
kann das, daß das script mit der aktuellen firmware (29.04.87) auf der 7170 nicht mehr funktioniert? bei mir wird bei der statusabfrage nichts ausgegeben. der fehler scheint in rul_find aufzutreten, weil $fnmsn danach leer ist.
gruß,
whoopi
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.