Erweiterter callmonitor

Es dauer aber sehr lange bis die Meldun kommt, 4 oder 5 Klingeln. Kannn ich das Irgendwie "friesieren"?
 
vielleicht hast du die invers-Suche an? Das kostet Zeit...
 
Moin!

Hab jetzt mal eine Update der DBox auf einen neuen CVS Stand gemacht, seitdem funktioniert die Anrufanzeige auf die DBox nicht mehr.
Hintergrund: Ich habe die Webinterfaces meiner Boxen von Anfang an mit einem Passwort versehen. Früher ging das Absetzen einer Nachricht über den Browser ohne Passwortabfrage (http://192.168.1.1/control/message?nmsg=Test), doch bei den neuen Imagen muß man auf auch für einen Nachricht user und password eingeben. Hab natürlich sofort probiert mit --user='xxx' --password='xxx' hinter dboxmessage in der debug.cfg, ohne Erfolg. Werden diese Daten bei dboxmessage nicht ausgewertet?
Hab mal probiert wie weiter vorn beschrieben direkt von der console aus eine Nachricht abzusetzten (. /usr/bin/callmonitor.out ; dboxmessage --user='bla' --password='blupp' 192.168.1.1.) doch dann kommt "-sh: dboxmessage: not found". Bin jetzt erstmal mit meinem Latein am Ende. Kann man die user/password Abfrage irgendwie auch für dboxmessage angeben?

...bye DonQ
 
Im neuen mod scheint etwas mit der basic_auth nicht mehr zu stimmen:
Code:
~ # . /usr/bin/callmonitor.out
~ # dreammessage --user=root --password=xxxxxxxxx 192.168.178.10
-t /cgi-bin/xmessage?timeout=15&caption=Telefonanruf&body=%s --user=root --password=xxxxxxxxxxxx 192.168.178.10
sed: bad format in substitution expression
Tuesday, 04.October 2005

09:45 Uhr - Anruf an

von
HTTP/1.0 401 Unauthorized
Connection: close
Content-Type: text/html
WWW-Authenticate: Basic realm="dreambox"

<html><head><title>Error 401</title></head><body><h1>Error 401: Unauthorized</h1></body></html>
~ #

Mir gefällt diese Zeile in der callmonitor.out nicht:

Code:
    sed -e '1d;2s/^/Authorization: Basic /;3,$s/^/ /;s/$/
/;$d'
}
Aber wenn mir was nicht gefällt, heisst das noch gar nix :)

HILFE .... !?
 
DonQuijote schrieb:
Hab natürlich sofort probiert mit --user='xxx' --password='xxx' hinter dboxmessage in der debug.cfg, ohne Erfolg. Werden diese Daten bei dboxmessage nicht ausgewertet?
Doch, die werden bei allen HTTP-basierten Funktionen ausgewertet: dboxmessage, dboxpopup, dreammessage, getmsg.
. /usr/bin/callmonitor.out ; dboxmessage [...] -sh: dboxmessage: not found"
Hmm, was steht dann in deiner callmonitor.listeners (nicht dboxmessage?) Hast du vielleicht eine uralte Version des callmonitors im Betrieb, bei der auch die Authentifizierung noch nicht dabei war?

Viele Grüße.
 
Erkan schrieb:
Im neuen mod scheint etwas mit der basic_auth nicht mehr zu stimmen
Die Funktion hat sich seit langer Zeit nicht mehr verändert (und das sed im Mod auch nicht). Könnte es sein, dass die callmonitor.out bei dir (beim Auspacken, FTP, etc.) irgendwie kaputtgegangen ist? Das, was hier aussieht wie ein Zeilenumbruch (zwischen "s/$/" und "/"), darf nur ein Carriage Return (0x0d) sein:
Code:
    sed -e '1d;2s/^/Authorization: Basic /;3,$s/^/ /;s/$/
/;$d'
}
Ansonsten bin ich etwas ratlos ...

Grüße.
 
Hallo!

Erstmal Danke für die schnellen Antworten. Im Moment habe ich folgende FW-Version drauf 06.03.67m3.12. Und das ist meine /var/tmp/callmonitor.listeners

Code:
^       ^xxx dboxmessage --user='xxx' --password='xxx' 192.168.xxx.xxx
^       ^SIP0 dboxmessage --user='xxx' --password='xxx' 192.168.xxx.xxx
^       ^xxx dboxmessage 192.168.xxx.xxx
^       ^xxx yac 192.168.xxx.xxx
^       ^SIP0 yac 192.168.xxx.xxx
^xxx    ^xxx etherwakes
#192.168.178.26 dboxpopup
#[url]www.somwhere.net[/url] ownmessage [url]www.somewhere.net[/url]
(richtige Ziffern durch xxx ersetzt)

Ist die Version aus dem 3.12er Mod zu alt? Das Komische ist ja das der callmonitor soweit funktioniert (eine Box hat noch ein altes Image und da funktioniert alles), nur die user und password Optionen werden nicht ausgewertet.

...bye DonQ
 
DonQuijote schrieb:
Ist die Version aus dem 3.12er Mod zu alt?
Ich hab gerade nicht den Überblick, was bei 3.12 dabei ist. Du könntest aber mal in die callmonitor.out gucken, ob dort eine Funktion basic_auth auftaucht (einfach mal nach dem String suchen). (Leider habe ich damals keine Versionsnummer vergeben; das werde ich in Zukunft machen.)
 
buehmann schrieb:
Könnte es sein, dass die callmonitor.out bei dir (beim Auspacken, FTP, etc.) irgendwie kaputtgegangen ist? Das, was hier aussieht wie ein Zeilenumbruch (zwischen "s/$/" und "/"), darf nur ein Carriage Return (0x0d) sein:
Code:
    sed -e '1d;2s/^/Authorization: Basic /;3,$s/^/ /;s/$/
/;$d'
}
Ansonsten bin ich etwas ratlos ...

Grüße.

Hallo buehmann,
das dachte ich auch, darum habe ich das Image heute nochmal komplett neu unter Linux erstellt und auch copy&paste vermieden - gestern über Netz mit UltraEdit auf dem Windoof-Rechner angepasst - änderte aber auch nix.

Der callmonitor an sich funktioniert ja. Wenn ich das Web-If der dreambox ohne Passwortabfrage lasse, dann geht's. Ebenso funktioniert ein Etherwake ... aber mit Passwortabfrage tut es eben nicht.

Ich dachte nur, dass eben genau dieser Zeilenumbruch im sed nicht passt.
 
In meiner callmonitor.out taucht das hier auf:

Code:
# output an HTTP Authorization header (Basic)
# basic_auth <user> <password>
basic_auth() {
    local user="$1" password="$2"
    echo -n "$user:$password" | uuencode -m - |
/;$d'ed -e '1d;2s/^/Authorization: Basic /;3,$s/^/ /;s/$/
}

Denke das ist die von dir erwähnte Funktion. Ich denke auch das bei Erkan das selbe Problem ist?!?

...bye DonQ
 
DonQuijote schrieb:
Denke das ist die von dir erwähnte Funktion. Ich denke auch das bei Erkan das selbe Problem ist?!?
Ja, das ist die Funktion. Dein callmonitor sollte also prinzipiell User/Passwort unterstützen. Vielleicht hat es wirklich was mit Erkans Problem zu tun. Ich werde erst mal, sobald ich Zeit habe, die Funktion basic_auth bei mir auf der Box ausprobieren. Wenn wir Glück haben, habe ich dann dasselbe Problem ...
 
Mal anders rum gefragt:
Geht bei jemandem die Message auf einer dbox/dreambox bei aktivierter HTTP-Authentifizierung und dem Mod m4.25???
 
Erkan schrieb:
Geht bei jemandem die Message auf einer dbox/dreambox bei aktivierter HTTP-Authentifizierung und dem Mod 4.25?
Hi, ich habe gestern noch kurz m4.25 bei mir installiert, und basic_auth hat dort funktioniert:
Code:
~ # /etc/version -v -vsub
14.03.85
m4.25
~ # . /usr/bin/callmonitor.out
~ # basic_auth bla blupp
Authorization: Basic YmxhOmJsdXBw
 
Moin!

Irgendwie verstehe ich irgendwas nicht???
Wenn ich . /usr/bin/callmonitor.out ; basic_auth bla blupp eingebe kommt wieder -sh: basic_auth: not found.
Mit dem ersten Befehl werden die Funktionen geladen und mit dem Zweiten wird ein beliebiger Befehl aus callmonitor.out ausgeführt? Müßte mit ps dann nicht die laufende callmonitor.out zu sehen sein? Isse nämlich bei mir nicht.
Wenn wir nicht weiter kommen mach ich am WE mal Etherreal auf den PC und schaue was von der FritzBox abgesendet wird.
So muß jetzt den Rechner abbauen...Wohnung renovieren ist angesagt.

...bye DonQ
 
Bei mir kommt:
Code:
~ # . /usr/bin/callmonitor.out
~ # basic_auth bla blupp
sed: bad format in substitution expression

Heute habe ich nochmal ein Image gebastelt mit der m4.26 - somit scheiden kaputte Dateien eigentlich aus, da es gestern m4.25 das Gleiche war ...

Der callmonitor arbeitet soweit richtig, denn es wird die reverse-suche ausgeführt und wie gesagt etherwake geht auch.

Hier mal meine callmonitor.out:
Code:
# Include via ". /usr/lib/callmonitor.out"
#
# Listener types and common utilities; separate function for each type
# of listener. Add your own!
#
# These environment variables are set by callmonitor before calling
# calling a listener:
#   MSISDN  caller's number
#   CALLER  caller's name
#   CALLED  number called

# some utilities

# get configuration entries from debug.cfg
get_it() {
    local VALUE="$(sed -ne "s/^$1=\(['\"]\?\)\(.*\)\1[        ]*/\2/p" \
        /var/flash/debug.cfg)"
    echo "${VALUE:-"$2"}"
}

# URL encoding
urlencode() {
    echo -e $(echo -n "$*" |
    hexdump -v -e '/1 "!%02x"' |
    sed -f /proc/self/fd/9 9<<\END )
s/!\(2[1ade]\)/\\x\1/g
s/!\(3[0-9]\)/\\x\1/g
s/!\(4[1-9a-f]\)/\\x\1/g
s/!\(5[0-9af]\)/\\x\1/g
s/!\(6[1-9a-f]\)/\\x\1/g
s/!\(7[0-9a]\)/\\x\1/g
s/!/%/g
END
}

# output an HTTP Authorization header (Basic)
# basic_auth <user> <password>
basic_auth() {
    local user="$1" password="$2"
    echo -n "$user:$password" | uuencode -m - |
    sed -e '1d;2s/^/Authorization: Basic /;3,$s/^/ /;s/$/
/;$d'
}

# default message
default_message() {
    cat <<-EOM
        $(date +%A', '%d'.'%B' '%Y)

        $(date +%R' Uhr - ')Anruf an $CALLED

        von $MSISDN
        $CALLER
        EOM
}

# get matching IPs from multilease and execute a command for each of them
# example: for_ips 192.168.10. dboxpopup "Ring!"
for_leases() {
    local IPS="$(fgrep -i "$1" /var/flash/multid.leases | awk '{ print $3 }')"
    local COMMAND="$2" IP=
    shift 2
    for IP in $IPS
    do
        "$COMMAND" "$IP" "$@" &
    done
}

# Usage: getmsg [OPTION]... <HOST> <url-template> [<message>]...
#        getmsg [OPTION]... -t <url-template> <host> [<message>]...
# Send a message in a simple HTTP GET request.
#
#   -t, --template=FORMAT  use this printf-style template to build the URL,
#                          all following messages are URL-encoded and filled
#                          into this template
#   -p, --port=PORT        use a special target port (default 80)
#   -w, --timeout=SECONDS  set connect timeout (default 3)
#   -v, --virtual=VIRT     use a different virtual host (default HOST)
#   -U, --user=USER        user for basic authorization
#   -P, --password=PASS    password for basic authorization
getmsg() {
    local - IP= URL= TEMPLATE= VIRTUAL= USERNAME= PASSWORD= AUTH= TEMP=
    local PORT=80 TIMEOUT=3
    echo "$@"
    TEMP="$(getopt -n getmsg -o U:P:v:t:w:p: \
        -l user:,password:,virtual:,port:,template:,timeout: -- "$@")"
    if [ $? != 0 ]; then return 1; fi
    set -f; eval "set -- $TEMP"; set +f
    while true; do
        case "$1" in
            -U|--user) USERNAME="$2"; shift 2 ;;
            -P|--password) PASSWORD="$2"; shift 2 ;;
            -v|--virtual) VIRTUAL="$2"; shift 2 ;;
            -t|--template) TEMPLATE="$2"; shift 2 ;;
            -w|--timeout) TIMEOUT="$2"; shift 2 ;;
            -p|--port) PORT="$2"; shift 2 ;;
            --) shift; break ;;
            *) shift ;; # should never happen
        esac
    done
    if [ $# -eq 0 ]; then echo "Missing hostname or IP" >&2; return 1; fi
    IP="$1"; shift
    if [ -z "$TEMPLATE" ]; then
        if [ $# -eq 0 ]; then echo "Missing template" >&2; return 1; fi
        TEMPLATE="$1"; shift
    fi
    if [ $# -eq 0 ]; then set -- "$(default_message)"; fi
    VIRTUAL="${VIRTUAL:-$IP}"
    if [ -n "$USERNAME" -o -n "$PASSWORD" ]; then
        AUTH="$(basic_auth "$USERNAME" "$PASSWORD")"
    fi
    echo "$@"
    URL="$(set -f; printf "$TEMPLATE" \
        $(for arg in "$@"; do urlencode "$arg"; done))"
    {
        echo -e "GET $URL HTTP/1.0\r"
        echo -e "Host: $VIRTUAL\r"
        [ -n "$AUTH" ] && echo "$AUTH"
        echo -e "\r"
    } | nc -w "$TIMEOUT" "$IP" "$PORT"
}

# resolve numbers to names and addresses ([url]www.dasoertliche.de)[/url]
reverse_lookup() {
    local NUMBER="$1"
    case "$NUMBER" in
        0049*) NUMBER="0${NUMBER#0049}" ;;
        0*) ;;
        *) OKZ="$(get_it OKZ)"; NUMBER="$OKZ$NUMBER" ;;
    esac
    getmsg -w 5 [url]www.dasoertliche.de[/url] "$NUMBER" \
        -t '/DB4Web/es/oetb2suche/home.htm?main=Antwort&s=2&kw_invers=%s' |
    sed -e '/<a class="blb" href="home.htm/!d' \
    -e 's#
#, #g' -e 's#<[^>]*># #g' \
    -e 's#[     ][      ]*# #g' -e 's#^ ##' -e 's# $##' -e 's# ,#,#'
}

# simple *box listeners
dboxpopup() {
    getmsg -t "/control/message?popup=%s" "$@"
}
dboxmessage() {
    getmsg -t "/control/message?nmsg=%s" "$@"
}
dreammessage() {
    getmsg -t "/cgi-bin/xmessage?timeout=15&caption=TELEFONANRUF&body=%s" "$@"
}

# Usage: yac [OPTION]... [MESSAGE]
# Send a message to a yac listener (Yet Another Caller ID Program)
#   -p, --port=PORT        use a special target port (default 10629)
yac() {
    local - IP= MESSAGE= PORT=10629 TEMP
    TEMP="$(getopt -n yac -o p: -l port: -- "$@")"
    if [ $? != 0 ]; then return 1; fi
    set -f; eval "set -- $TEMP"; set +f
    while true; do
        case "$1" in
            -p|--port) PORT="$2"; shift 2 ;;
            --) shift; break ;;
            *) shift ;; # should never happen
        esac
    done
    if [ $# -eq 0 ]; then echo "Missing hostname or IP" >&2; return 1; fi
    IP="$1" MESSAGE="${2-"@CALL$CALLER~$MSISDN"}"
    echo -e "$MESSAGE\0\c" | nc -w 2 "$IP" "$PORT"
}

# wake up all devices configured in debug.cfg
etherwakes() {
    local etheropt
    get_it ETHERWAKES |
    while read etheropt
    do
        /bin/etherwake $etheropt
    done
}

# start or stop ssh daemon
droptoggle() {
    dropoff || dropon
}

# start ssh daemon
dropon() {
    /usr/sbin/dropbear $(get_it DROPBEAR_OPTIONS "-p $(get_it DROPPORT 22)")
}

# stop ssh daemon
dropoff() {
    killall dropbear
}
~ #
 
DonQuijote schrieb:
Mit dem ersten Befehl werden die Funktionen geladen und mit dem Zweiten wird ein beliebiger Befehl aus callmonitor.out ausgeführt?
Ja, genau. Warum es bei dir dann heißt, dass der Befehl nicht gefunden wurde, kann ich mir nicht erklären. Führst du beide Befehle ("." und "basic_auth") in derselben Shell hintereinander aus und bekommst keine weiteren Fehlermeldungen?
Müßte mit ps dann nicht die laufende callmonitor.out zu sehen sein?
Nein, mit dem Kommando "." liest die aktuelle Shell (die deine Eingaben entgegennimmt) nur Befehle aus der angegebenen Datei ein. Es wird kein eigener Prozess gestartet.

Das mit ethereal ist eine gute Idee; vielleicht werden wir dann schlauer. Viel Spaß bei der Renovierung.
 
Super - es geht!!!

Da es vielleicht noch andere betrifft:
buehmann hat herausgefunden, dass meine callmonitor durch Bearbeitung mit "KWrite" beschädigt wurde! Jetzt habe ich es über Netz mit UltraEdit bearbeitet und jetzt tut der callmonitor auch mit basic_auth!

Vielen Dank nochmal an buehmann ! ! !
 
Erkan schrieb:
dass meine callmonitor durch Bearbeitung mit "KWrite" beschädigt wurde!
Ich werde die betroffene "empfindliche" Stelle in der nächsten Version des callmonitors ändern, so dass uns dieser Typ Fehler in Zukunft erspart bleibt. :)
 
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.