Callmonitor: kurzes öffnen von Ports (Sesam, öffne dich)

JensemannWF

Mitglied
Mitglied seit
22 Jul 2005
Beiträge
262
Punkte für Reaktionen
0
Punkte
16
Moin,
dank der ausführlichen Erklärungen in diversen Threads ist mir die Einrichtung von WOL von definierten Anrufnummern auf eine weiter nicht genutzte VoIP Rufnummer gelungen.
Unklar ist mir auch nach exzessiver Studie die Anwendung von
1. droptoggle
2. matchtest

Die Syntax und der richtige Ort dafür ist mir unklar.
Kann mir jemand dabei behilflich sein, das Thema zu lösen?
Die Datei README.Konfiguration habe ich nicht umsetzen können.

Ist es möglich, per Script, welches vom Callmanager gestartet wird, ein Portforwarding für einige Minuten zu aktivieren (tcp443)?
Wird eine über 443 etablierte Verbindung "überleben" nachdem dieses Portforwarding wieder geschlossen wird? Das wäre genau die Funktion die ich gern hätte.
Handy ruft Dummynummer -> WOL; 2 min Forwarding auf; innerhalb dieser Zeit Verbindung herstellen, welche beliebig bestehen bleibt;
Gruß Jens
 
droptoggle = dropbear an / aus
Anwndung im callmonitor: 0179xyz SIP1 droptoggle

matchtest weiß ich auch nicht, wo steht das?

Die Readme ist immer noch aus mod55-Tagen - das ist lange her ;)

und das letzte Thema:
prinzipiell geht das wahrscheinlich am einfachsten durch einen POST-Request mit der Portfreigabe, einem Sleep-Befehl und einem abschließenden POST-Befehl, um die Portfreigabe wieder zu schließen.

ungefähr so:
Code:
export REQUEST_METHOD="POST"
export REMOTE_ADDR="127.0.0.1"
export CONTENT_TYPE="application/x-www-form-urlencoded"

POST_DATA="forwardrules:settings/rule0/activated=1"
export CONTENT_LENGTH=${#POST_DATA}

echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null 

echo "port offen, gehe schlafen"
sleep 120
echo "wieder wach, schließe..."

export REQUEST_METHOD="POST"
export REMOTE_ADDR="127.0.0.1"
export CONTENT_TYPE="application/x-www-form-urlencoded"

POST_DATA="forwardrules:settings/rule0/activated=0"
export CONTENT_LENGTH=${#POST_DATA}

echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null 

echo "wieder zu, viel spass!!"

dabei ist rule0 die erste in der Liste der Freigaben, musst du zählen...
 
Hallo Fritzchen,
danke für die detailierte Hilfe. Die Idee mit dem Post ist ja prima!
Gibt es eine einfache Methode, die Posts des WebGui abzufangen bzw. zu scripten, um sich die Sache einfach zu machen?

Zu Matchtest: die Info stammt aus besagtem Readme.Konfiguration des m4.27a Paketes.

Ob eine etablierte Connection 443 "am Leben bleibt", werde ich ja testen können, wenn ich das Script mit dem open sleep 120 und close reif habe. Wär ja nett :)

Das droptoggle werde ich gleich mal probieren. DANKE! :)

Gruß Jens


fritzchen schrieb:
droptoggle = dropbear an / aus
Anwndung im callmonitor: 0179xyz SIP1 droptoggle

matchtest weiß ich auch nicht, wo steht das?

Die Readme ist immer noch aus mod55-Tagen - das ist lange her ;)

und das letzte Thema:
prinzipiell geht das wahrscheinlich am einfachsten durch einen POST-Request mit der Portfreigabe, einem Sleep-Befehl und einem abschließenden POST-Befehl, um die Portfreigabe wieder zu schließen.

ungefähr so:
Code:
export REQUEST_METHOD="POST"
export REMOTE_ADDR="127.0.0.1"
export CONTENT_TYPE="application/x-www-form-urlencoded"

POST_DATA="login:command/password=test
&forwardrules:settings/rule14/activated=1
&forwardrules:settings/rule14/description=supersicher
&forwardrules:settings/rule14/protocol=TCP
&forwardrules:settings/rule14/port=443
&forwardrules:settings/rule14/fwip=192.168.178.xyz
&forwardrules:settings/rule14/fwport=443
" 
export CONTENT_LENGTH=${#POST_DATA}

echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null
 
habe das Skript für die Portfreigabe oben editiert und getestet

anzuwenden dann im callmonitor mit

017xyz SIP1 /var/tmp/portfreigabe.sh
 
Hallo Fritzchen,
super Ding! werde ich gleich probieren. Bin gespannt, ob eine Connection weiterläuft, nachdem das forwarding geschlossen wird.

Dein Tipp mit droptoggle hat auch prima funktioniert!

Ein fettes Danke! :)

Jetzt habe ich quasi zwei gangbare, sichere Methoden, um meinen PC fernzusteuern.
Entweder per Tunnel per getoggeltem SSH oder direkt per forward 443 auf den WOL PC (remotely anywhere), sofern sich das Forward-toggle bewährt.

Gruß Jens

fritzchen schrieb:
habe das Skript für die Portfreigabe oben editiert und getestet

anzuwenden dann im callmonitor mit

017xyz SIP1 /var/tmp/portfreigabe.sh
 
Hallo fritzchen,
nochmals zu Deinem feinen Script für das forwarding.
Ich habe es auch erfolgreich getestet und freue mich, daß es genau das ist, was ich benötige.
Auch nach Abschalten des forwardings bleibt die bereits aufgebaute Connection stehen.
Einziges Restproblem: Ich habe bislang keinen Erfolg gehabt, Dein Script von der debug.cfg erstellen zu lassen, da ich das "Zauberzeichen" nicht kenne, welches das Auflösen der verwendeten Variablen vermeidet und nur den Text in die gewünschte Datei bringt.
Code:
cat <<EOP > /var/tmp/sesam
export REQUEST_METHOD="POST"
export REMOTE_ADDR="127.0.0.1"
export CONTENT_TYPE="application/x-www-form-urlencoded"

POST_DATA="forwardrules:settings/rule2/activated=1"
export CONTENT_LENGTH=${#POST_DATA}

echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null

echo "port offen, gehe schlafen"
sleep 20
echo "wieder wach, "

export REQUEST_METHOD="POST"
export REMOTE_ADDR="127.0.0.1"
export CONTENT_TYPE="application/x-www-form-urlencoded"

POST_DATA="forwardrules:settings/rule2/activated=0"
export CONTENT_LENGTH=${#POST_DATA}

echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null

echo "wieder zu, viel spass!!"
EOP
chmod +x /var/tmp/sesam

Wenn ich das so mache, sind im Zielscript die Variablen bereits aufgelöst (mit leerem Inhalt)
Ich habe als "Zauberzeichen '´`" probiert, doch ein Treffer war nicht dabe :)
Vieleicht hats Du ja den richtigen Tipp für mich? Würd mich freuen ;)

Gruß Jens



fritzchen schrieb:
habe das Skript für die Portfreigabe oben editiert und getestet

anzuwenden dann im callmonitor mit

017xyz SIP1 /var/tmp/portfreigabe.sh
 
als Zauberzeichen sollte ein \ vor jedem $ Wunder wirken...

wenn nicht melde Dich
 
Mensch KLASSE!! Das ist es! Jetzt klappt es :)
Per Anruf von meinen gewünschten Quellnummern habe ich jetzt über den Callmanager Wake-on-LAN in Kombination mit dem temporären Portforwarding, so daß ich innerhalb der zur Verfügung stehenden Zeit (20s) meine pw-authentisierende Nutzconnection aufbaue und danach der Router nach außen wieder dicht ist. Dein Script heist deshalb "sesam" bei mir ;)
Richtig Freude macht der Umstand, daß sich das abgeschaltete Portforwarding nicht auf die bereits laufende Connection auswirkt.
So gefällt mir das!
Ganz dickes DANKE für Deine Tipps und Hilfe:)
Gruß Jens

fritzchen schrieb:
als Zauberzeichen sollte ein \ vor jedem $ Wunder wirken...

wenn nicht melde Dich
 
Hallo Jens,

freut mich! Dann schlage ich vor, dass Du vielleicht den Titel des Threads änderst, so dass vielleicht auch andere an "sesam" kommen...
 
Gute Idee! Ist erledigt.
Gruß Jens

fritzchen schrieb:
Hallo Jens,

freut mich! Dann schlage ich vor, dass Du vielleicht den Titel des Threads änderst, so dass vielleicht auch andere an "sesam" kommen...
 
sesam öffne dich mit danisahne mod

hallo genau auf sowas wie oben geschildert habe ich schon lange gewartet,


wie bekomme ich den code dauerhaft auf meine fritzbox 7050 mit ds-0.2rc1
sodass ich es als aufruf im callmonitor (auch nach einem neustart) nutzen kann?




für die hilfe vielen dank
 
Zuletzt bearbeitet:
kulant schrieb:
wie bekomme ich den code dauerhaft auf meine fritzbox 7050 mit ds-0.2rc1 [...]?
Hallo, solche kleinen Skripte kannst du prima im Verzeichnisbaum /tmp/flash/ ablegen, in dem auch die Konfigurationsdateien etc. aus dem ds-mod liegen. Mit "modsave flash" wird das Verzeichnis zusammengepackt und ins Flash geschrieben, bei allen nächsten Neustarts dann automatisch wiederhergestellt.
(Ansonsten kannst du das Skript natürlich auch unveränderbar in die Firmware packen; einfach vor dem Erstellen unterhalb von ds-0.2/root/ ablegen.)

Gruß,
Andreas
 
super vielen dank für die superschnelle antwort!

nochmals zum kapieren:

1. ich kopiere den code aus beitrag2 (von fritzchen) zum bsp. in proton
2. dann ändere ich "forwardrules:settings/rule0/ <--- rule0...1..2 je nachdem was ich haben will
3. dann speichern als "portforwarding.sh"
4.die erstellte portforwarding.sh ins verzeichnis /tmp/flash/ auf der fritzbox schieben und per telnet "modsave flash" ausführen


muss das script noch mit chmod ausführbar gemacht werden?


vielmals danke gruss, harald
 
Punkte 3 und 4 klingen gut; vorher solltest du von Hand testen, ob dein Skript fehlerfrei ist und das macht, was es soll.
kulant schrieb:
muss das script noch mit chmod ausführbar gemacht werden?
Wenn du es ausführen willst, schon ... ;-) (Natürlich könntest du es auch mit "sh /tmp/flash/portforwarding.sh" aufrufen, aber wenn es direkt ausführbar ist, ist es praktischer (die "#!/bin/sh"-Zeile nicht vergessen).)

Viel Erfolg beim Ausprobieren,
Andreas
 
ok also script ist drauf und läuft auch durch nur leider geht der port nur auf wenn
das passwort der fritzbox weboberfläche deaktiviert ist
 
Zuletzt bearbeitet:
kulant schrieb:
nur leider geht der port nur auf wenn
das passwort der fritzbox weboberfläche deaktiviert ist
Hi, bei aktiviertem Passwort musst du dein Script sich vorher einloggen lassen: POST-Request mit "login:command/password=..." an webcm. (Im Callmonitor habe ich in /usr/lib/callmonitor/webui.sh entsprechende Funktionen (die auch das Passwort automatisch aus der Konfiguration auslesen), weil ich genau das gleiche beim Download der Anrufliste machen musste.)

Gruß,
Andreas
 
fritzchen schrieb:
als Zauberzeichen sollte ein \ vor jedem $ Wunder wirken...
Es reicht, wenn man ein Here-Dokument ohne Parametersubstitution nimmt.
# No parameter substitution when the "limit string" is quoted or escaped.
# Either of the following at the head of the here document would have the same effect.
# cat <<"Endofmessage"
# cat <<\Endofmessage
Z.B. so:
Code:
cat <<'EOP' > /var/tmp/sesam
Hth Sascha
 
durch script portforwarding dynamisch ändern

in diesem thread bin ich auf die lösung gestoßen, wie sich über shell scripte bestehende forwarding rules aktivieren bzw. deaktivieren lassen.

da ich einen host im lokalen netz hinter der fritzbox über ssl port 443 und gleichzeitig die wol site des ds-mod über matrixtunnel ebenfalls über ssl port 443 erreichen möchte, hab ich das gepostete script etwas erweitert.

mithilfe des folgenden scripts (welches als hintergrundprozess gestartet werden sollte) wird in abhängigkeit der erreichbarkeit meines lokalen hosts eine der beiden von mir angelegten forwarding rules:

- rule 0 (auf die fritzbox) oder
- rule 1 (auf meinen lokalen host)

aktiviert, jeweils die andere deaktiviert.

somit erreiche ich stets über ssl port 443 bei ausgeschaltetem lokalen host die wol site zum aufwecken des selbigen, andernfalls erreiche ich sofort meinen lokalen host.

mfg
hubihs

Code:
#!/bin/sh

#
# This script is runnning in loop for ever, checking a host's state by using 
# ping command. If host state changes from down to up forwarding rule 0
# becomes disabled and forwarding rule 1 becomes enabled. If host state
# changes from down to up forwarding rules will become changed vice versa. 
#

myHost=192.168.1.15          # ip adress
myCheckingInterval=15        # in seconds

myHostState=0                # state of myHost (0-down, 1-up)
                             # is used to recognize state-change
                             # so only if state changes, forwarding rules will become changed

SetForwarding()
{
        # This function enables/disables present forwarding rules
        # parameter 1 specifies the number of forwarding rule  (starting with 0)
        # parameter 2 specifies new state (0 - disabled, 1 - enabled) 

        export REQUEST_METHOD="POST"
        export REMOTE_ADDR="127.0.0.1"
        export CONTENT_TYPE="application/x-www-form-urlencoded"

        POST_DATA="forwardrules:settings/rule$1/activated=$2"
        export CONTENT_LENGTH=${#POST_DATA}
      
        echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null
}

ForwardingToFritzBox()
{
        # disable must be called first
        SetForwarding 1 0       #(rule1, disable)
        SetForwarding 0 1       #(rule0, enable)

	# if script becomes started with & option to run in background
	# using echo command is not allowed (just for debugging)
        #echo "Forwarding to FritzBox is set"
}

ForwardingToMyHost()
{
        # disable must be called first
        SetForwarding 0 0       #(rule0, disabled)
        SetForwarding 1 1       #(rule1, enable)

	# if script becomes started with & option to run in background
	# using echo command is not allowed (just for debugging)
        #echo "Forwarding to MyHost is set"
}

# at init state host is down an forwarding is set to FritzBox
myHostState=0
ForwardingToFritzBox


# loop for ever to set forwarding rules
while [ 1 -ne 0 ]; do
        # reapet checking ever x second
        sleep $myCheckingInterval

        # execute ping command, only return value is used
        ping -q -c1 $myHost > /dev/null

        # depending on return value and state variable "myHostState" we make decision
        if [ "$?" -eq 0 ]; then
                # myHost is up
                if [ $myHostState -eq 0 ]; then
                        # myHostState changed to up, so set https forwarding to Netivsta
                        myHostState=1
                        ForwardingToMyHost
                fi
        else
                # myHost is down
                if [ $myHostState -ne 0 ]; then
                        # myHostState changed to down, so set https forwarding to FritzBox
                        myHostState=0 
                        ForwardingToFritzBox
                fi
        fi
done

exit 0
 
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.