.titleBar { margin-bottom: 5px!important; }

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

Dieses Thema im Forum "FRITZ!Box Fon: Modifikationen" wurde erstellt von JensemannWF, 14 Okt. 2005.

  1. JensemannWF

    JensemannWF Mitglied

    Registriert seit:
    22 Juli 2005
    Beiträge:
    262
    Zustimmungen:
    0
    Punkte für Erfolge:
    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
     
  2. fritzchen

    fritzchen Aktives Mitglied

    Registriert seit:
    29 Dez. 2004
    Beiträge:
    813
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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...
     
  3. JensemannWF

    JensemannWF Mitglied

    Registriert seit:
    22 Juli 2005
    Beiträge:
    262
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    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


     
  4. fritzchen

    fritzchen Aktives Mitglied

    Registriert seit:
    29 Dez. 2004
    Beiträge:
    813
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    habe das Skript für die Portfreigabe oben editiert und getestet

    anzuwenden dann im callmonitor mit

    017xyz SIP1 /var/tmp/portfreigabe.sh
     
  5. JensemannWF

    JensemannWF Mitglied

    Registriert seit:
    22 Juli 2005
    Beiträge:
    262
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    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

     
  6. JensemannWF

    JensemannWF Mitglied

    Registriert seit:
    22 Juli 2005
    Beiträge:
    262
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    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



     
  7. fritzchen

    fritzchen Aktives Mitglied

    Registriert seit:
    29 Dez. 2004
    Beiträge:
    813
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    als Zauberzeichen sollte ein \ vor jedem $ Wunder wirken...

    wenn nicht melde Dich
     
  8. JensemannWF

    JensemannWF Mitglied

    Registriert seit:
    22 Juli 2005
    Beiträge:
    262
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    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

     
  9. fritzchen

    fritzchen Aktives Mitglied

    Registriert seit:
    29 Dez. 2004
    Beiträge:
    813
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo Jens,

    freut mich! Dann schlage ich vor, dass Du vielleicht den Titel des Threads änderst, so dass vielleicht auch andere an "sesam" kommen...
     
  10. JensemannWF

    JensemannWF Mitglied

    Registriert seit:
    22 Juli 2005
    Beiträge:
    262
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Gute Idee! Ist erledigt.
    Gruß Jens

     
  11. kulant

    kulant Neuer User

    Registriert seit:
    6 Dez. 2005
    Beiträge:
    44
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    #11 kulant, 28 Dez. 2005
    Zuletzt bearbeitet: 28 Dez. 2005
    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
     
  12. buehmann

    buehmann Aktives Mitglied

    Registriert seit:
    11 Juni 2005
    Beiträge:
    1,810
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  13. kulant

    kulant Neuer User

    Registriert seit:
    6 Dez. 2005
    Beiträge:
    44
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    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
     
  14. buehmann

    buehmann Aktives Mitglied

    Registriert seit:
    11 Juni 2005
    Beiträge:
    1,810
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Punkte 3 und 4 klingen gut; vorher solltest du von Hand testen, ob dein Skript fehlerfrei ist und das macht, was es soll.
    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
     
  15. kulant

    kulant Neuer User

    Registriert seit:
    6 Dez. 2005
    Beiträge:
    44
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    #15 kulant, 28 Dez. 2005
    Zuletzt bearbeitet: 28 Dez. 2005
    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
     
  16. buehmann

    buehmann Aktives Mitglied

    Registriert seit:
    11 Juni 2005
    Beiträge:
    1,810
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  17. sascha

    sascha Neuer User

    Registriert seit:
    30 Sep. 2004
    Beiträge:
    165
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Es reicht, wenn man ein Here-Dokument ohne Parametersubstitution nimmt.
    Z.B. so:
    Code:
    cat <<'EOP' > /var/tmp/sesam 
    Hth Sascha
     
  18. hubihs

    hubihs Neuer User

    Registriert seit:
    16 Feb. 2008
    Beiträge:
    1
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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