[Frage] Anrufe von bestimmer Nummer nur x-mal pro Tag zulassen

Monsi89

Neuer User
Mitglied seit
26 Jan 2014
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich bin neu hier und hoffe ihr könnt mir helfen:

Es geht darum, die Anrufe von einer bestimmten Rufnummer (da diese häufig entschieden zu oft eingehen) "dynamisch" zu blockieren. Das heißt, dass die Fritzbox die Anrufe von dieser Nummer beispielsweise immer dann blockiert, wenn schon 3 Anrufe von dieser Nummer an diesem Tag eingegangen sind oder angenommen wurden.
Gibt es so eine Möglichkeit, kann sich irgendwer etwas vorstellen? Irgendein Script oder so? Ich kenne mich leider äußerst wenig mit dem ganzen aus und hoffe, dass mir jemand von euch viel Arbeit abnehmen und schnell sagen kann, ob das technisch überhaupt möglich ist und am besten noch falls ja, wie das dann ungefähr eingerichtet werden müsste.

Vielen Dank und beste Grüße!
 
Mit Bordmitteln direkt funktioniert das sicher nicht. Denkbar wäre eine Script-Lösung:
- Die Fritzbox führt bei jedem eingehenden Anruf ein Script namens calllog aus.
- Dieses Script müsste die Nummer auswerten und mitzählen.
- Bei Erreichen der Schwelle müsste sich das Script auf der Fritzbox einloggen und die Nummer auf die Blacklist setzen.
- Man braucht dann noch einen Dämon, der das Ganze jeden Tag zurücksetzt.
Um sowas zu realisieren braucht ein erfahrener Programmierer schon mal ein paar Tässchen Kaffee.
 
Hallo chked,

vielen Dank schonmal! Dazu hätte ich dann gleich wieder mehrere Fragen:

- in welcher Sprache müsste so ein Script programmiert werden und wie bekommt man es auf der Fritzbox zum laufen?
- was genau ist der Unterschied zwischen "dem" Skript und dem benötitgten Dämon? Braucht letzterer noch irgendwelche anderen besonderen Voraussetzungen, Programmiersprachen o.ä.?
- aus den ersten beiden Fragen ergebend: Was müsste der erfahrene Programmierer denn genau können? Kann man so jemanden für kleines Geld irgendwo bekommen?

- gibt es alternativ eine (einfachere) Möglichkeit, beispielsweise über einen Shortcut auf PC oder (Android) Smartphone, eine bestimmte Nummer "mit einem Klick" zu (un)blocken? Also quasi eine Art Makro, um sich den umständlichen Weg über PC anschalten -> Fritzbox Menü -> Untermenüs -> ... zu sparen?
 
Hallo allerseits,

ich würde mich über ein paar weitere/detaillierte Infos über mein Problem hier noch sehr freuen, falls chked momentan keine Zeit hat gerne auch von jemand anderem. Vielen Dank im Voraus!
 
/var/flash/callllog oder /var/calllog?

Moin

Editieren von /var/flash/calllog, oder /var/calllog...

Vorsicht ihr könnt das Zeichenorientierte Gerät löschen wenn ihr nicht nvi zum editieren benutzt!

nvi /var/flash/calllog
geht obiges nicht, dann mit echo "" > /var/flash/calllog diese "aktivieren" und nochmal versuchen.

Variante, müsst ihr probieren ob es bei euch geht:
Eine Datei auf /var/calllog erstellen oder gleich mit einem Skript verlinken.
Bei mir geht das und diese Methode bevorzuge ich deshalb...
Code:
# ln -sf /var/media/NEW_LINK/openelec/notify.sh /var/calllog
# ls -AFlap /var/callllog
lrwxrwxrwx    1 root     root            38 Jan 30 11:39 /var/calllog -> /var/media/NEW_LINK/openelec/notify.sh*
(Dieses Skript gibt via JSON eingehende Anrufe auf meinen Raspberry Pi in einer Dialogbox aus)
...die kann dann auch ganz normal mit vi editiert werden.

Zum Testen einfach echo $@ als einzigstes Kommando in dieser Datei,
Konsole offen lassen und euch mal selber mit dem Mobile Anrufen.
Meistens werden nur die Parameter $1, $2 und $3 benötigt.
 
Zuletzt bearbeitet:
Wow, danke koyaanisqatsi!

Das sieht alles super und recht professionell aus, aber leider verstehe ich da nur Bahnhof :confused:

Wo und wie kann ich diese Pfade/Dateien editieren? Was genau bringt dieser Code von dir da jetzt? Was genau fehlt noch?

Sorry für das blöde Fragen, aber ich finde momentan keinen richtigen Einstieg in das Thema und kann mit den Informationen bislang leider echt noch rein gar nichts anfangen..
 
Kein Ding.
Die Dateien in /var/flash sind "Zeiger" auf (beschreibbare) Speicherbereiche im Flash deiner Box.
Die dürfen deswegen nicht wie normale (Text) Dateien behandelt werden.
Direktes editieren mit vi ist deshalb Tabu. Indirektes mit dem "Wrapper" nvi ist OK.
Wenn in /var/flash/calllog also steht: echo $@
Dann wird alles Ausgegeben was an Argumenten an /var/flash/calllog übergeben wurde.
Also die Kurzform von: echo $1 $2 $3 $4 $5 $6 $7 $8 $9
In $1 steht die Zielrufnummer.
In $2 steht die Nummer des Anrufers.
Dann kann mit einem Vergleich (if;then;else;fi) auf die Anrufer/Zielrufnummer z.B. ein Zähler um eins höhergesetzt werden.
Wenn der Zähler dann meinetwegen 3 erreicht, wird gleich wieder aufgelegt.
Inhalt von /var/flash/calllog
Code:
#!/bin/sh

ANRUFAN=${1}
ANRUFER=${2}
POTENZIELGESPERRT=08154711

if [ ${ANRUFAN} ]
then
  echo ${ANRUFAN}' wird angerufen von '${ANRUFER}
fi
if [ ${ANRUFER} -eq ${POTENZIELGESPERRT} ]
then
# Rest deiner Kommandofolgen
# (Ich schreib dir nicht das ganze Skript)
echo ${POTENZIELGESPERRT}' wird bald gesperrt!'
fi
#EOF
...testen tu ich das, wie geschrieben, mit /var/calllog, scheint aber irgendwie nicht auf jeder Box zu funktionieren.

Du könntest zum Testen danach mal eingeben: sh /var/flash/calllog 123456789 08154711
Code:
deepbase # cd /var/
deepbase # sh calllog 123 321
123 wird angerufen von 321
deepbase # sh calllog 123 08154711
123 wird angerufen von 08154711
08154711 wird bald gesperrt!
 
Zuletzt bearbeitet:
Ich würde nicht abheben und auflegen, sondern schlicht eine Sperre für eingehende Anrufe dieser Nummer einrichten:

ctlmgr_ctl w telcfg settings/CallerIDActions0/CallerID 08912345678
ctlmgr_ctl w telcfg settings/CallerIDActions0/Action 1
ctlmgr_ctl w telcfg settings/CallerIDActions0/Active 1

Ist die Sperre eingerichtet, reicht hinterher, active nur zwischen 0 und 1 zu ändern, also eine Zeile.

Indem man z.B. Destination (für Sperre leer) auf 600 setzt, kann man auch zum AB umleiten.

Ich würde schlicht freetz mit Callmonitor und crond auf die Fritzbox packen. Das vereinfacht den Aufruf von Skripten und das Rücksetzen in bestimmten Zeiten (und das Definieren von erlaubten Zeiten für die eingehenden Anrufe) erheblich.
 
Oh je, immer neue Tools und Mods die hier genannt werden, mich als absoluten Anfänger erschlägt das ehrlich gesagt etwas. Trotzdem, riesen Dank euch beiden erstmal, das sieht nach ner Menge Arbeit aus!


Die Idee mit der Sperre statt abheben/auflegen klingt für mich sehr gut. Zumal es für den Anrufer auch nicht wie abheben/auflegen wirken soll. Das Beispiel für den Inhalt von /var/flash/calllog ist auch toll. Ich denke, die fehlenden Zeilen könnte ich schon noch irgendwie hinbasteln und einfügen - gut wäre natürlich noch zu wissen, welche "Sprache" das ist damit ich die richigen Tutorials etc. nehme. Kann man dort dann auch das Zurücksetzen des Zählers nach einem Tag erreichen?

Und vor alem, wie und wo muss ich das ganze Zeug einfügen? Wie komme ich an /var/flash/calllog ran? Ich habe schon die Forensuche benutzt, bei "nvi" kommt leider nichtmal irgendein einziges Ergebnis :(
Noch mehr "tiefgreifende" Änderungen wie Freetz und ähnliches würde ich am liebsten vermeiden, da es für meine Eltern ist und die mit einem neuen Menü o.ä. wahrscheinlich nicht gut klarkommen und auch reguläre FB Updates dann wahrscheinlich schwierig werden?

Auch wenn ihr wahrscheinlich eigentlich alles schonmal erwähnt habt oder als selbstverständlich anseht; für eine kurze, idiotensichere "Schritt für Schritt"-Anleitung des groben Vorgehens wäre ich sehr dankbar.
Würde mich natürlich gerne auch irgendwie anders erkenntlich zeigen, wenn das sonst zuviel Arbeit ist. Vielen Dank für eure Hilfe!
 
Moin

Deine Unsicherheit ist berechtigt und gesund.
Also tu was dagegen, sonst skriptest du dir nur einen Briefbeschwerer.

Die Sprache heisst: Shellskript oder Shellscript
Das nvi ist nur ein Wrapper Shellskript: /usr/bin/nvi
Damit wird eine Kopie editiert die bei Beenden auf die Originaldatei mit cat zurück "kopiert" wird.
Um nvi bedienen zu können musst du also wissen wie vi funktioniert.
Hier im Forum sucht man am Besten mit Google: klick

Klingt komisch, ist aber so.

Und hier haste noch was zum Studieren.
Ein Paradebeispiel wie durch die Festlegung eines Limits (maxcount)
und Erhöhung einer Laufzeitvariable (count) eine Schleife (while) gesteuert wird.
Code:
#!/bin/sh
echo "Content-type: text/plain"
echo ""
# $1: active/online (optional)
landevicelist() {
        local checktype=${1:-active}
        local count=0
        local maxcount=$(ctlmgr_ctl r landevice settings/landevice/count)
        while [ $count -lt $maxcount ] ; do
                local showmac=$(ctlmgr_ctl r landevice settings/landevice$count/$checktype)
                if [ $showmac -eq 1 ] ; then
                        local mac=$(ctlmgr_ctl r landevice settings/landevice$count/mac)
                        local name=$(ctlmgr_ctl r landevice settings/landevice$count/name)
                        echo $mac $name
                fi
                : $((count++))
        done
}
echo "Folgende Geraete sind im Netzwerk angemeldet:"
landevicelist
echo "Folgende Geraete sind online:"
landevicelist online
Das Skript ist nicht von mir, der Autor hat sich nicht verewigt.
Hab ich aber hier aus dem Forum. ;) Kannst ja mal nach suchen.
Dann trag ich den Originalautor auch nach. :mrgreen:
 
Zuletzt bearbeitet:
Hi,

hatte mal etwas Zeit, vielleicht hilft dir das ja:
Code:
#!/bin/sh

CALLER=${1}
CALLED=${2}

# Wie oft maximal?
MAXCALLS=2
# Welche Nummer
WATCHANDBLOCK=08154711

# Wieviele Blacklist Einträge gibt es?
BLOCKLISTS=$(ctlmgr_ctl r telcfg settings/CallerIDActions/count)
C=0
BLACKLISTENTRY=-1

# durch alle Einträge und Nummer suchen
while [ $C -lt $BLOCKLISTS ]; do
        # Nummer gefunden?
        [ "$(ctlmgr_ctl r telcfg settings/CallerIDActions$C/CallerID)" = "$WATCHANDBLOCK" ] && BLACKLISTENTRY=$C
        : $((C++))
done

if [ $BLACKLISTENTRY -eq -1 ]; then 
# keinen Eintrag gefunden, also anlegen
        ctlmgr_ctl w telcfg settings/CallerIDActions$C/CallerID $WATCHANDBLOCK
        ctlmgr_ctl w telcfg settings/CallerIDActions$C/Action 1
        ctlmgr_ctl w telcfg settings/CallerIDActions$C/Active 0
        BLACKLISTENTRY=$C
fi

TODAY="$(date +%Y-%m-%d)"

# Gibt es eine Datei mit Anzahl der Anrufe? Dann laden
# Deren change-Datum ist Zeitpunkt des letzten Anrufs 
if [ -e /var/tmp/callsfrom_$WATCHANDBLOCK ]; then
        CALLS=$(cat /var/tmp/callsfrom_$WATCHANDBLOCK)
        LASTCALLDATE=$(stat -c %z /var/tmp/callsfrom_$WATCHANDBLOCK | sed 's/ .*//')
# nicht heute? Dann "neues Spiel"
        [ "$LASTCALLDATE" = "$TODAY" ] || CALLS=0
else
        CALLS=0
fi

[ $CALLS -eq 0  ] && ctlmgr_ctl w telcfg settings/CallerIDActions${BLACKLISTENTRY}/Active 0

if [ "$CALLER" = "$WATCHANDBLOCK" ]; then
        : $((CALLS++))
        echo "$CALLS" > /var/tmp/callsfrom_$WATCHANDBLOCK
        [ $CALLS -gt $MAXCALLS ] && ctlmgr_ctl w telcfg settings/CallerIDActions${BLACKLISTENTRY}/Active 1
fi
 
Moin

Nicht, schlecht.
Diese Vorgehensweise hat auch den Vorteil, dass die Rufsperre im Webinterface eingesehen werden kann.
calllog_rufsperre_01.png
Ob der TE da noch durchblickt? Besonders die Prozedur wo mit der
/var/tmp/callsfrom_08154711 gearbeitet wird.
Damit ist natürlich sichergestellt das die Sperre nur diesen Tag gilt.

RESPEKT!!
 
Zuletzt bearbeitet:
Hier mal ein Versuch ohne Anlegen von Dateien, sondern mittels "Anrufliste":

Code:
#!/bin/sh

CALLER=${1}
CALLED=${2}

# Wie oft maximal?
MAXCALLS=2
# Welche Nummer
WATCHANDBLOCK=08154711

# Wieviele Blacklist Einträge gibt es?
BLOCKLISTS=$(ctlmgr_ctl r telcfg settings/CallerIDActions/count)
C=0
BLACKLISTENTRY=-1

# durch alle Einträge und Nummer suchen
while [ $C -lt $BLOCKLISTS ]; do
        # Nummer gefunden?
        [ "$(ctlmgr_ctl r telcfg settings/CallerIDActions$C/CallerID)" = "$WATCHANDBLOCK" ] && BLACKLISTENTRY=$C
        : $((C++))
done

if [ $BLACKLISTENTRY -eq -1 ]; then 
# keinen Eintrag gefunden, also anlegen
        ctlmgr_ctl w telcfg settings/CallerIDActions$C/CallerID $WATCHANDBLOCK
        ctlmgr_ctl w telcfg settings/CallerIDActions$C/Action 1
        ctlmgr_ctl w telcfg settings/CallerIDActions$C/Active 0
        BLACKLISTENTRY=$C
fi

TODAY=$(date +%d.%m.%y)

ctlmgr_ctl r telcfg settings/RefreshJournal

# Datum des neusten Anrufs
CDATE=$(ctlmgr_ctl r telcfg settings/Journal0/Date)
# Format wie:  
# date +"%d.%m.%y %H:%M"
# also etwa: "31.12.13 23:59"
# Datum ist davon der erste Teil, 8 Zeichen
# daher später Vergleich mit ${CDATE::8} oder auf den "Anfang der Zeile"

# erster Anruf des Tages? dann Blockierung lösen.
# Hinweis: kommt der erste Anruf gleich von der "überwachten" Nummer, 
#          wurde der noch "vom Vortag" geblockt, wird aber trotzdem "gezählt" !
[ ${CDATE::8} = $TODAY ] || ctlmgr_ctl w telcfg settings/CallerIDActions${BLACKLISTENTRY}/Active 0

# weiter nur, wenn "überwachter" Anrufer anruft

if [ "$CALLER" = "$WATCHANDBLOCK" ]; then
	C=0
	CALLSTODAY=0
	MAX=$(ctlmgr_ctl r telcfg settings/Journal/count)
	# Schleife maximal über alle Elemente der Anrufliste, 
	# aber nur über die Einträge "von heute" (Eintrag beginnt mit heutigem Datum, Uhrzeit ist egal)
	while [ $C -lt $MAX ] && ctlmgr_ctl r telcfg settings/Journal${C}/Date | grep -q -e "^$TODAY" ; do
		# Type 1 = eingehender Anruf, 2 = verpasster Anruf nur die sind von Interesse
		if [ $(ctlmgr_ctl r telcfg settings/Journal${C}/Type) -le 2 ]; then
			[ "$(ctlmgr_ctl r telcfg settings/Journal${C}/Number)" = "$WATCHANDBLOCK" ] && : $(( CALLSTODAY++))
		fi
		: $((C++))
	done
	ISACT=$(ctlmgr_ctl r telcfg settings/CallerIDActions${BLACKLISTENTRY}/Active)	
	if [ $CALLSTODAY -gt  $MAXCALLS ]; then # mehr Anrufe als erlaubt ? Falls noch nicht gesetzt, Sperre setzen
		[ "$ISACT" = "1" ] ||  ctlmgr_ctl w telcfg settings/CallerIDActions${BLACKLISTENTRY}/Active 1
	else # weniger Anrufe als erlaubt ? Falls noch nicht gelöscht, Sperre löschen (sollte nie vorkommen, aber ...)
		[ "$ISACT" = "0" ] ||  ctlmgr_ctl w telcfg settings/CallerIDActions${BLACKLISTENTRY}/Active 0
	fi
fi

Die Idee kommt von hier
 
Zuletzt bearbeitet:
Beim direkten Auführen kommt...
Code:
deepbase # . scripts/watchandblock.sh 123 08154711
ash: 02.02.14: unknown operand
deepbase # sh scripts/watchandblock.sh 123 08154711
sh: 02.02.14: unknown operand
...die Sperre wird gesetzt, hatte aber keine aktive Sperrung bei 5 Anrufen.
(trotz MAXCALLS=2)
 
Zuletzt bearbeitet:
Hallo koyaanisqatsi,
ich zähle mich noch zu den absuluten Anfängern in Sachen Scripting und habe deshalb folgende Frage:
Im Script von MaxMuster wird doch als erster Parameter die Rufnummer des Anrufers nach CALLER übergeben.
Der zweite Paramater CALLED wird aber nirgends ausgewertet und führt wohl zur Fehlermeldung "unknown operand".
Du fragst in deinem Beispielaufruf aber die Rufnummer 123 ab und übergibst zusätzlich die Zahlenfolge 08154711.
Hab ich da im Script von MaxMuster etwas falsch verstanden/nicht beachtet?

Joe
 
Gut beobachtet.
Es gehört genau andersrum, erst die 08154711 und dann eine Zielrufnummer.
Trotzdem führt dann der richtige Aufruf zu: sh: 02.02.14: unknown operand
(Das ist wohl das Datum, welches für die Anrufsliste gebraucht wird)

Ansonsten hab ich es auch mit /var/flash/calllog und einen Anruf mit Mobile getestet.

Wenn ein Anruf reinkommt...
Dann wird /var/flash/calllog in $1 der Anrufer und in $2 die Zielrufnummer übergeben.
Deswegen kann das auch so getestet werden, ohne echten Anruf.
Da aber in der Anrufsliste der Fritzbox noch keine Anrufe dieser Nummer stehn,
muss es auch mal mit einem echten Anruf getestet werden,
damit eben von dieser Nummer Anrufe in der Liste stehen.
Natürlich muss die WATCHANDBLOCK Variable dann eben auf die vom (Test)Mobile geändert werden.
 
Zuletzt bearbeitet:
Beim direkten Auführen kommt...
Code:
deepbase # . scripts/watchandblock.sh 123 08154711
ash: 02.02.14: unknown operand
könntest du es mal mit "sh -x scripts/watchandblock.sh 123 08154711" versuchen?

Ich tippe auf die Zeile "[ ${CDATE::8} = $TODAY ] || ..."
in der "CDATE" keinen Wert bekommen hat?!?

Könntest du die mal ändern in " [ "${CDATE::8}" = "$TODAY" ] || ..."

und auch mal ausführen "ctlmgr_ctl r telcfg settings/Journal0/Date" ?


...die Sperre wird gesetzt, hatte aber keine aktive Sperrung bei 5 Anrufen.
Verstehe ich nicht ...


EDIT
@Joe_57: Dass die Variable für die Zielnummer zugewiesen aber nicht genutzt wird, stört das Skript nicht. Ich vermute wie gesagt eher, dass das holen das Datums aus der Anrufliste schief läuft...
 
Zuletzt bearbeitet:
So gerade nochmal mit einem eingehenden Anruf mit meiner Mobilenummer und aktiver /var/calllog getestet.
Ohne deinen Vorschlag zur Änderrung, erstmal.
Code:
deepbase # 017XXXXXXX 6XXXXXXX0 SIP0#6XXXXXX0 Mein Name im Telefonbuch <--debugausgabe
sh: 02.02.14: unknown operand <-- Fehlermeldung
telefon: SIGCHLD PID 14633 received!

Jetzt mal mit deiner Änderung...
Code:
deepbase # 017XXXXXXX 6XXXXXXX0 SIP0#6XXXXXX0 Mein Name im Telefonbuch <--debugausgabe
telefon: SIGCHLD PID 14725 received!
...gut, bloss es kommt immer noch jeder Anruf durch.
Trotz: calllog_rufsperre_02.png
...das meinte ich. Es stehen 6 Anrufe von Heute in der Anrufsliste.

Ach, ja, ctlmgr_ctl r telcfg settings/Journal0/Date == Keinerlei Ausgabe, nichts.
 
Zuletzt bearbeitet:
Was ergibt denn

ctlmgr_ctl r telcfg settings/Journal0/Date
 
mach mal:
echo "AT&V" | nc localhost 1011 | grep Reject

Findest du dann deine Nummer? etwa so?
Code:
CID: 01761300             Reject on  use default              ->
 
Zuletzt bearbeitet:

Zurzeit aktive Besucher

Statistik des Forums

Themen
244,831
Beiträge
2,219,105
Mitglieder
371,533
Neuestes Mitglied
ipeee
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.