ralphi: Cross-Origin bei der Fritzbox

Hi all,
Ich möchte gerne auf die Fritzbox per JS / Jquery zugreifen (Port: 1012).

Anders als bei meinen Apache- Servern weiß ich bei der Fritzbox nicht, wie ich

Access-Control-Allow-Origin: * 

einfügen kann.

Gibt es auch eine Möglichkeit vom Client den Zugriff zu erlauben ?

Firebug liefert:

Quellübergreifende (Cross-Origin) Anfrage blockiert: Die Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource auf http://192.168.123.254:1012/&t=1467040682840. (Grund: CORS-Kopfzeile 'Access-Control-Allow-Origin' fehlt).

Viele Grüße aus LA
ralphi

--
"Nicht alles was einfach ist, ist genial, aber alles was genial ist, ist einfach" - Albert E.
  1. Hallo,

    Ich möchte gerne auf die Fritzbox per JS / Jquery zugreifen (Port: 1012).

    warum ausgerechnet mit JS? Port 1012 deutet darauf hin, dass du einen Anrufmonitor realisieren willst. Das würde ich dann eher als echte Standalone-Applikation machen wollen. Denkbar wäre auch eine Lösung in PHP ohne Webserver (also ein PHP-Script, das direkt von der Kommandozeile gestartet wird). Da hättest du solche Einschränkungen nicht.

    Anders als bei meinen Apache- Servern weiß ich bei der Fritzbox nicht, wie ich

    Access-Control-Allow-Origin: * 
    

    einfügen kann.

    Vermutlich gar nicht so ohne weiteres, denn der integrierte Webserver der Fritzbüx ist alles, nur kein Apache, und wird vermutlich sehr speziell auf die Anforderungen zugeschnitten sein.

    Gibt es auch eine Möglichkeit vom Client den Zugriff zu erlauben ?

    AFAIK nicht - wobei sich beim Firefox eventuell ein Blick in die lange Litanei der Einstellungen in about:config lohnt.

    http://192.168.123.254:1012/&t=1467040682840.
    

    Hattest du vor der Fritzbox mal einen Netgear-Router? AVM hat sich meines Wissens für 192.168.178.1 als Default-IP-Adresse der Box entschieden, aber 192.168.123.254 ist komischerweise auch meine individuelle Einstellung, weil das die Default-Adresse des Netgear-Routers war, den ich davor hatte.

    Ciao,
     Martin

    --
    Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
    - Douglas Adams, The Hitchhiker's Guide To The Galaxy
    1. Hi all,

      Das würde ich dann eher als echte Standalone-Applikation machen wollen. Denkbar wäre auch eine Lösung in PHP ohne Webserver (also ein PHP-Script, das direkt von der Kommandozeile gestartet wird).

      das läuft bei mir schon.
      Bis Vorgestern seit 2012 noch mit einem externen Modem (Router unabhängig). Jetzt mit einer Socketverbindung zur Fritzbox.
      Das ganze auf meinem Server (Banana Pi) im Keller mit php.

      Ich hab jetzt eine Anfrage, ob man einen Monitor mit Anruflisten OHNE zusätzlichen Server lösen kann.
      Da die Fritzbox den Port 1012 für Anrufe und jede Menge Soap- Servicegeschichten anbietet, denke ich das es machbar ist.

      Bevor ich mich in JAVA (für Tray-Icon-Prog) oder ActivX (für Win Gadgets) einarbeite, dachte ich mir, ich lös es erst mal mit JS als Win-Gadget.

      Ich wollte später eh noch Fragen zu SOAP und Login-Daten für JS stellen, wenn des mal klappt.

      Hattest du vor der Fritzbox mal einen Netgear-Router? AVM hat sich meines Wissens für 192.168.178.1 als Default-IP-Adresse der Box entschieden, aber 192.168.123.254 ist komischerweise auch meine individuelle Einstellung, weil das die Default-Adresse des Netgear-Routers war, den ich davor hatte.

      Hatte früher eine Fritzbox-FON ca. 10 Jahre alt (erste mit WLAN) mit 192.168.123.x (nicht veränderbar). Hatte bisher einige untersch. Router am laufen. Netgear kann man allerdings die IP aber wählen!?

      Viele Grüße aus LA
      ralphi

      --
      "Nicht alles was einfach ist, ist genial, aber alles was genial ist, ist einfach" - Albert E.
      1. Hi all,

        Hi one, ;-)

        Das würde ich dann eher als echte Standalone-Applikation machen wollen. Denkbar wäre auch eine Lösung in PHP ohne Webserver (also ein PHP-Script, das direkt von der Kommandozeile gestartet wird).

        das läuft bei mir schon.
        Bis Vorgestern seit 2012 noch mit einem externen Modem (Router unabhängig). Jetzt mit einer Socketverbindung zur Fritzbox.
        Das ganze auf meinem Server (Banana Pi) im Keller mit php.

        das geht natürlich auch.

        Ich hab jetzt eine Anfrage, ob man einen Monitor mit Anruflisten OHNE zusätzlichen Server lösen kann.

        Klar - deswegen hatte ich eine Standalone-Anwendung vorgeschlagen, in welcher Programmiersprache auch immer. Mein Favorit wäre C. Ich habe das sogar vor längerer Zeit als rudimentäre Konsolen-Anwendung gemacht, die im Grunde nichts weiter tat als eine Socket-Verbindung zu Port 1012 der Box aufzubauen und einfach alles an der Konsole auszugeben, was die Box erzählt (also nicht viel mehr als ein Telnet). Geplant war, das später als Daemon laufen zu lassen, der live in eine Protokolldatei schreibt, aber das ist dann mangels Zeit und Entschlossenheit auf der Strecke geblieben.

        Da die Fritzbox den Port 1012 für Anrufe und jede Menge Soap- Servicegeschichten anbietet, ...

        Jede Menge Servicegeschichten? Hast du dazu etwas mehr Info? Würde mich sehr interessieren. Bisher weiß ich nur, dass an Port 1012 Telefonie-Ereignisse live gemeldet werden. Was denn noch? AVM hält sich ja leider mit technischen Auskünften sehr bedeckt. :-(

        ... denke ich das es machbar ist.

        Klar, aber eben nicht mit Javascript, das von woanders geladen wird. Wobei ... ich hab mal gelesen, dass man im Speicher der Box selbst auch kleine Mengen Daten ablegen und die dann über den Webserver der Box abrufen kann. Dann bestünde das Same-Origin-Problem nicht mehr.

        Bevor ich mich in JAVA (für Tray-Icon-Prog)

        Warum ausgerechnet Java?

        oder ActivX (für Win Gadgets) einarbeite, dachte ich mir, ich lös es erst mal mit JS als Win-Gadget.

        Warum ActiveX? Ein Tray-Icon anzeigen und damit interagieren, ist unter Windows relativ einfach. Das sind bloß eine Handvoll API-Aufrufe. Allerdings bin ich mit Windows mittlerweile ziemlich aus der Übung.

        Hattest du vor der Fritzbox mal einen Netgear-Router? AVM hat sich meines Wissens für 192.168.178.1 als Default-IP-Adresse der Box entschieden, aber 192.168.123.254 ist komischerweise auch meine individuelle Einstellung, weil das die Default-Adresse des Netgear-Routers war, den ich davor hatte.

        Hatte früher eine Fritzbox-FON ca. 10 Jahre alt (erste mit WLAN) mit 192.168.123.x (nicht veränderbar).

        Ah. Wusste gar nicht, dass es sowas mal gab.

        Hatte bisher einige untersch. Router am laufen. Netgear kann man allerdings die IP aber wählen!?

        Natürlich. Aber die Kiste habe ich damals in ihrer Default-Konfiguration betrieben, und als ich später auf die Fritzbüx umgestiegen bin, habe ich die bis dahin verwendeten IP-Adressen beibehalten.

        So long,
         Martin

        --
        Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
        - Douglas Adams, The Hitchhiker's Guide To The Galaxy
        1. Hi Martin :-),

          Jede Menge Servicegeschichten? Hast du dazu etwas mehr Info? Würde mich sehr interessieren. Bisher weiß ich nur, dass an Port 1012 Telefonie-Ereignisse live gemeldet werden. Was denn noch? AVM hält sich ja leider mit technischen Auskünften sehr bedeckt. :-(

          Nun - was deine Fritz kann, erfährst du unter:

          http://192.168.123.254:49000/tr64desc.xml
          

          bei dem gewünschten Service die SCPDURL kopieren zB.

          http://192.168.123.254:49000/x_contactSCPD.xml
          

          und du siehst die Möglichkeiten.

          zB SID auslesen:

          <?php
          $client = new SoapClient(
              null,
              array(
                  'location'   => 'http://192.168.123.254:49000/upnp/control/deviceconfig',
                  'uri'           => "urn:dslforum-org:service:DeviceConfig:1",
                  'login'      => "xxx",
                  'password'   => 'xxx'
              )
          );
          $result = $client->{"X_AVM-DE_CreateUrlSID"}();
          print_r($result);
          ?>
          

          Wobei ich gleich die Frage habe: Wenn ich die SID habe, muss ich bei künftigen Anfragen noch user+pass angeben?

          Mit einem Shellcommand gäng's auch (getestet mit Status, ohne login), wenn ich wissen würde, wie ich den Login unterbringe, zB bei den Listen:
          XML-File:

          <?xml version="1.0" encoding="utf-8" ?>
          <s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
            <s:Body>
              <u:GetStatusInfo xmlns:u="urn:dslforum-org:service:X_AVM-DE_OnTel:1" />
            </s:Body>
          </s:Envelope>
          

          Shell:

          #!/bin/bash
          curl -s "http://192.168.123.254:49000/upnp/control/x_contact" -H "Content-Type: text/xml; charset='utf-8'" -H "SoapAction:urn:dslforum-org:service:X_AVM-DE_OnTel:1#GetCallList" -d "@book_out.xml" > /myprogs/moni/test.txt
          

          Bevor ich mich in JAVA (für Tray-Icon-Prog)

          Warum ausgerechnet Java?

          Mir wurde der JAN Anrufmonitor gezeigt.

          Warum ActiveX? Ein Tray-Icon anzeigen und damit interagieren, ist unter Windows relativ einfach. Das sind bloß eine Handvoll API-Aufrufe. Allerdings bin ich mit Windows mittlerweile ziemlich aus der Übung.

          Hast du einen direkt verwendbaren Codeschnippsel für mich in C ?

          Natürlich. Aber die Kiste habe ich damals in ihrer Default-Konfiguration betrieben, und als ich später auf die Fritzbüx umgestiegen bin, habe ich die bis dahin verwendeten IP-Adressen beibehalten.

          like me :-)

          Viele Grüße aus LA
          ralphi

          --
          "Nicht alles was einfach ist, ist genial, aber alles was genial ist, ist einfach" - Albert E.
          1. Moin Ralph,

            Nun - was deine Fritz kann, erfährst du unter:

            http://192.168.123.254:49000/tr64desc.xml
            

            wow ... jede Menge Informationen, die ich zum großen Teil noch nicht verstehe. Da muss ich mich mal langsam durchwühlen.

            bei dem gewünschten Service die SCPDURL kopieren zB.

            http://192.168.123.254:49000/x_contactSCPD.xml
            

            und du siehst die Möglichkeiten.

            Auch da muss ich mich erstmal orientieren ...
            Allerdings sind das nun alles Aufrufe an Port 49000, während ursprünglich von Port 1012 die Rede war. Das irritierte mich, weil ich dich so verstanden hatte, als sollten alle diese Funktionen auch über 1012 gehen.

            Wobei ich gleich die Frage habe: Wenn ich die SID habe, muss ich bei künftigen Anfragen noch user+pass angeben?

            Keine Ahnung - logisch betrachtet eigentlich nicht. Ausprobieren! :-)

            Bevor ich mich in JAVA (für Tray-Icon-Prog)

            Warum ausgerechnet Java?

            Mir wurde der JAN Anrufmonitor gezeigt.

            Ah, okay. Kenn ich nicht, hab nur mal davon gehört.

            Warum ActiveX? Ein Tray-Icon anzeigen und damit interagieren, ist unter Windows relativ einfach. Das sind bloß eine Handvoll API-Aufrufe. Allerdings bin ich mit Windows mittlerweile ziemlich aus der Übung.

            Hast du einen direkt verwendbaren Codeschnippsel für mich in C ?

            Mal sehen ... Ich hatte das mal zum Ausprobieren. Ein Tray-Icon, das als Tooltip schlicht den Fenstertitel anzeigt, und das Klicks mit der rechten und linken Maustaste einfach nur zählt.

            NOTIFYICONDATA  TrayIconData;           // ist bei mir global
            
            
            // Tray-Icon initialisieren (nur Ausschnitt)
            INT InitApplication(INT WindowMode)
             { ...
               ...
               TrayIconData.cbSize           = sizeof(TrayIconData);        //
               TrayIconData.hWnd             = MainWin.Handle;              // Handle des zuständigen Fensters
               TrayIconData.uID              = IDN_TRAYICON;                // ID für die Notification Messages
               TrayIconData.uFlags           = NIF_ICON                     //
                                             + NIF_MESSAGE                  //
                                             + NIF_TIP;                     //
               TrayIconData.uCallbackMessage = IDN_TRAYICON;                // ID für die Notification Messages
               TrayIconData.hIcon            = TrayIcon[0];                 // Handle der Icon-Ressource
               lstrcpy(TrayIconData.szTip, MainWin.Caption);                // Tooltip für das Icon
            
               Shell_NotifyIcon(NIM_ADD, &TrayIconData);                    // Tray-Icon einrichten
               ...
             }
            
            // Auf Tray-Icon reagieren (Message-Bearbeitung in WndProc())
            LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
             { ...
               ...
            
               switch (msg)                                                 //
                { case ...
                     ...
                  case IDN_TRAYICON:                                     // Nachricht vom Tray-Icon
                     switch (lparam)                                     // was war los?
                      { case WM_LBUTTONDOWN:                             // Mausklick links
                           MessageBeep(-1);                              // Laut geben
                           LeftClick++;                                  // und zählen
            // Alternative: Mit TrackPopupMenu() ein Menü einblenden, ausgewählte Menübefehle landen
            // dann wieder in der Message Loopp des Hauptfensters, weitere Klimmzüge sind unnötig
                           break;                                        //
                        case WM_RBUTTONDOWN:                             // Mausklick rechts
                           MessageBeep(-1);                              // Laut geben
                           RightClick++;                                 // und zählen
                      }                                                  //
               ...
             }
            

            Weitere Möglichkeiten, wie z.B. das Icon selbst austauschen um einen Status zu signalisieren, oder eine "Sprechblase" anzeigen, müsste ich jetzt selbst auch erst recherchieren.

            Merke: Eine Sprechblase ist kein Fall für den Urologen. :-)

            Natürlich. Aber die Kiste habe ich damals in ihrer Default-Konfiguration betrieben, und als ich später auf die Fritzbüx umgestiegen bin, habe ich die bis dahin verwendeten IP-Adressen beibehalten.

            like me :-)

            That was my guess.

            So long,
             Martin

            --
            Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
            - Douglas Adams, The Hitchhiker's Guide To The Galaxy
            1. Hi Martin,

              wow ... jede Menge Informationen, die ich zum großen Teil noch nicht verstehe. Da muss ich mich mal langsam durchwühlen.

              ##Port 1012 liefert ja nur: (Hab mich selbst angerufen)

              25.06.16 03:11:25;CALL;1;13;xxxx21;xxxx25;SIP3;      # datetime  Ausgehend  Anschluss Gerät, nr-raus nr-an, iptel
              25.06.16 03:11:25;RING;2;xxxx21;xxxx25;SIP1;  # datetime Eingehend Anschluss, caller, nr-an , iptel
              25.06.16 03:11:27;DISCONNECT;2;0;   # datetime  ende anschluss dauer
              

              Hier hat jemand einen Monitor für XBMC / Kodi gebaut :-)

              Für die upnp – service zeug (SOAP) ist Port 49000:

              Die Anleitung ist gut (php) - mit einigen Beispielen
              Hier noch mal ein bsp für die shell
              von AVM gibts schon auch was: Zb eine Zusammenfassung eines Service für Telbook und Listen

              Mal sehen ... Ich hatte das mal zum Ausprobieren. Ein Tray-Icon, das als Tooltip schlicht den Fenstertitel anzeigt, und das Klicks mit der rechten und linken Maustaste einfach nur zählt.

              Danke für den Schnipsel. - hab jetzt ne Vorstellung davon - ist besser als unter VB6.
              Da ich bis jetzt nur C(++) für Auslesen von SPI, I2C, GPIO und Co in der Linux-Shell genommen habe, weiß ich noch überhaut nix von Fenstern :-(
              Ich denke, ich installier MS VS.

              Viele Grüße aus LA
              ralphi

              --
              "Nicht alles was einfach ist, ist genial, aber alles was genial ist, ist einfach" - Albert E.
              1. Hallo,

                ##Port 1012 liefert ja nur: (Hab mich selbst angerufen) [Telefonie-Ereignisse]

                genau, das war auch mein Kenntnisstand. Dann ist ja die Welt noch in Ordnung.

                Hier hat jemand einen Monitor für XBMC / Kodi gebaut :-)

                Hmm, in Perl. Das schränkt die Wiederverwendbarkeit für mich stark ein.

                Für die upnp – service zeug (SOAP) ist Port 49000:

                Hab ich kapiert, und genau das war mir neu.

                Die Anleitung ist gut (php) - mit einigen Beispielen

                Yo, sieht sehr interessant aus, danke fürs Raussuchen.

                von AVM gibts schon auch was: Zb eine Zusammenfassung eines Service für Telbook und Listen

                Gut, aber wie findet man solche Dokumente? Ich habe noch nicht gesehen, dass Derartiges irgendwo verlinkt oder sonstwie bekanntgemacht wird. Das meinte ich mit "sich bedeckt halten": Es gibt Informationen, aber AVM stellt sie nicht gerade offen zur Verfügung.

                Mal sehen ... Ich hatte das mal zum Ausprobieren. Ein Tray-Icon, das als Tooltip schlicht den Fenstertitel anzeigt, und das Klicks mit der rechten und linken Maustaste einfach nur zählt.

                Danke für den Schnipsel. - hab jetzt ne Vorstellung davon - ist besser als unter VB6.
                Da ich bis jetzt nur C(++) für Auslesen von SPI, I2C, GPIO und Co in der Linux-Shell genommen habe, weiß ich noch überhaut nix von Fenstern :-(

                Ups. Sehr ungünstig. Ich habe dagegen nie irgendeine Bibliothek oder ein Framework für die Windows-Programmierung verwendet, sondern immer nur direkt am Windows-API rumgemacht. Fand ich irgendwie einfacher, als sich erst in MFC oder .NET einzuarbeiten, und es ergibt sehr kompakten und effizienten Code.
                Einige Jahre habe ich dazu Borland C++ verwendet (von Version 3.1 bis 5.01), inzwischen DevC++, wenn ich doch noch mal was für Windows mache.

                Ich denke, ich installier MS VS.

                Meinetwegen. Manche halten MS Wuschel Studio für das genialste Tool seit geschnitten Brot, andere können nichts damit anfangen.
                Ich gehöre eher zur zweiten Gruppe und hab da auch immer einen großen Bogen drum gemacht.

                So long,
                 Martin

                --
                Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
                - Douglas Adams, The Hitchhiker's Guide To The Galaxy