Flashhilfe.de - Flash Community

FlashCS4, Serproxy, Arduino => crossdomain.xml [Flash CS4]

Forum > Flash mit anderen Programmiersprachen > FlashCS4, Serproxy, Arduino => crossdomain.xml

 


AntwortenRegistrieren Seite1

 19.12.2008, 00:29 
Benutzerbild von ZoeVision
Beiträge: 12
Wohnort: Berlin
Registriert: Dec 2008

FlashCS4, Serproxy, Arduino => crossdomain.xml
Hallo !

Ich habe hier einen Linux-Server (LAMP) + Arduino + Serproxy aufgesetzt und möchte aus einer Flash Anwendung auf das an dem Server angeschlossene Arduino Board zugreifen. Die einzelnen Softwarekomponenten wurden getestet und funktionieren einwandfrei. Apache2 und der Proxy für das Arduino Board laufen
auf einem Server.
(Apache => 192.168.1.100  +  SerProxy => 192.168.1.100 Port :5334)

Es gelingt mir leider nicht die Daten aus Flash heraus zu Übermitteln.

Wenn ich nun dei Flash seite auf dem Server aufrufe, dann kommt folgende Fehlermeldung von der Flash "Sandbox":

Error #2044: securityError unverarbeitet. text=Error #2048: Verletzung der Sicherheits-Sandbox: http://192.168.1.100/test.swf kann keine Daten von 127.0.0.1:5334 laden.
at test_fla::MainTimeline/frame1()

Hier der AS3 Quellcode:

import net.eriksjodin.arduino.Arduino;
import net.eriksjodin.arduino.events.ArduinoEvent;

Security.allowDomain("http://192.168.1.100");
Security.loadPolicyFile("http://192.168.1.100/crossdomain.xml");

var arduino:Arduino = new Arduino("http://192.168.1.100",5334);
arduino.addEventListener(Event.CONNECT,onSocketConnect);
arduino.addEventListener(Event.CLOSE,onSocketClose);

function onSocketConnect(e:Object):void {
trace("connect...");
}
      
function onSocketClose(e:Object):void {
trace("close...");
}

Hier die crossdomain:

<?xml version="1.0"?>
<cross-domain-policy>
  <allow-access-from domain="*" />
</cross-domain-policy>

Mir ist nicht ganz klar, warum die "Sandbox" hier über die "127.0.0.1:5334" meckert ?


Vielen Dank!

ZoeVision
 19.12.2008, 01:00Re1
Benutzerbild von BackToDos
Beiträge: 571
Wohnort: LE
Registriert: Apr 2006

das sind für den flashplayer zwei verschiedene hosts weil zwei verschiedene urls ...
mir ist nur nicht ganz klar, warum deine netzwerk ip auf dein localhost umgemapped wird ... da hilft wohl nichts, außer stundenlanges rumspielen, oder jmd anders weiß ne einfache lösung ... loadPolicyFile hat bei mir übrigens auch noch nie geklappt ... das einzige, was du machen kannst ist serverseitig sobald ein socket aufgeht und ein policy file request reinkommt, die policy file über den socket zurückzugeben ... das klappt immer ... :)
greetz
back2dos
 19.12.2008, 01:19Re2
Benutzerbild von ZoeVision
Beiträge: 12
Wohnort: Berlin
Registriert: Dec 2008

Themenautor/in

Hi !

Schön das ich nicht der einzige bin, der keinen schlaf findet :-)
Eine meiner Vermutungen war (ist), dass es Probleme mit dem SerProxy gibt.
Vielleicht sollte ich mal ein zweites Netzwerkdevice bzw. einen Virtuellen Server aufsetzen.....
Das mit dem "mapping" ist jedoch schon sehr komisch ! Wenn er vom Client nach "127.0.0.1:5334"
"guckt", findet er sich doch auch selbst ????? Wirr ?!

Vielen Dank...und
gute Nacht !

ZoeVision
 
nicht sichtbar bei eingeloggten Mitgliedern
 19.12.2008, 02:20Re3
Benutzerbild von ZoeVision
Beiträge: 12
Wohnort: Berlin
Registriert: Dec 2008

Themenautor/in

Hi (nochmal) !

... das einzige, was du machen kannst ist serverseitig sobald ein socket aufgeht und ein policy file request reinkommt, die policy file über den socket zurückzugeben ... das klappt immer ... :)

Kannst Du mir vielleicht zu der o.a. Möglichkeit ein kleines Code Beispiel posten ?

Jetzt aber...NACHT !


ZoeVision
 19.12.2008, 13:35Re4
Benutzerbild von BackToDos
Beiträge: 571
Wohnort: LE
Registriert: Apr 2006

hmm ... naja, also sobald flash einen socket zu einer fremddomain aufmacht, sendet es einen policy file request (das ist ne ganz kleine xml, wo fast garnix drinsteht) ... der socket ist solange nicht verfügbar, bis eine antwort kommt ... ist das die richtige policy file, dann wird der socket verfügbar, ansonsten wird er geschlossen und du kriegst deine fehlermeldung ...
entweder, du musst das in deinen SerProxy reinhacken, oder aber dein eigentliches Ziel muss sich so verhalten ... bzw. wenn ich mich nicht irre, fragt flash 9 ab version xyz erstmal auf port 843 oder 943 (weiß ich nicht mehr genau) nach der policy file, noch BEVOR es den socket zum zielport öffnet ...
d.h. du könntest dir auf den entsprechenden port einen server klemmen, der die policyfiles rausgibt ...

greetz
back2dos
greetz
back2dos
 20.12.2008, 02:52Re5
Benutzerbild von ZoeVision
Beiträge: 12
Wohnort: Berlin
Registriert: Dec 2008

Themenautor/in

Und wieder 2:40 uhr ....

Also: Ich hab mir jetz einen Socket Server eingerichtet, der auf Port 843 lauscht.
=> Vielen Dank => back2dos.

Ich denke damit bin ich was die Anforderungen von den neuen Sicherheitsrichtlinien auf dem richtigen weg.

Ein kleiner Perl bzw. Phyton Server der die Policy XML Übergibt.
Hier der Link:
http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html


Aber(!!!)
Entgegen der Beschreibung baut der Player jedoch keine Verbindung mit dem XML Socket Server auf.....es ist zum Haare raufen !!!!
(Evtl. Zugriffe würde man in der Konsole sehen)
Vielleicht hat noch jemand einen heißen Tipp ?

Vielen Dank !

ZoeVision



Hier noch ein Paar Infos zu dem Thema:

Herstellen einer Verbindung mit Sockets
http://help.adobe.com/de_DE/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7c60.html

Unterschiede Flash Player 9 und 10 zum Thema "Policy file"
http://www.adobe.com/devnet/flashplayer/articlesfplayer9_security_05.html#msg_redirect
Geändert von ZoeVision am 20.12.08 um 02:54 Uhr

 
nicht sichtbar bei eingeloggten Mitgliedern
 20.12.2008, 22:51Re6
Benutzerbild von BackToDos
Beiträge: 571
Wohnort: LE
Registriert: Apr 2006

öh, es gibt noch eine option ...
du nimmst dir irgendeinen beliebigen port, tust nen policy server drauf (der also nur policy file requests mit policy files beantwortet) und connectest erst zu dem, schließt den socket und öffnest dann einen zu deinem eigentlichen zielport ... das geht auch ...
greetz
back2dos
 07.01.2009, 23:47Re7
Benutzerbild von ZoeVision
Beiträge: 12
Wohnort: Berlin
Registriert: Dec 2008

Themenautor/in

Hallo !

Nach vielen "verzweifelten" Abenden , nun endlich der Erfolg....!!!
Hier eine kleine Besispielanwendung:

import net.eriksjodin.arduino.Arduino;
import net.eriksjodin.arduino.events.ArduinoEvent;
import flash.net.*;

function onSocketConnect(e:Object):void {
   trace("Socket connected!\n");
}
      
function onSocketClose(e:Object):void {
   trace("Socket closed!\n");
}

var arduino:Arduino = new Arduino();
arduino.connect("192.168.1.100",5334);
arduino.addEventListener(Event.CONNECT,onSocketConnect);
arduino.addEventListener(Event.CLOSE,onSocketClose);

Mein Ziel war es, einen remote Zugriff über einen Browser auf mein Arduino Board
zu "erlangen". Jedoch kann das mit dem aktuellen Flash-Player (10,0,12,36) nur mit einem "socket policy file server" umgesetzt werden.
(Informationen gibt es hier: http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html)

D.h. konkret, dass auf dem LAMP Server genau dieser "socket policy file server" laufen muss, um die entsprechenden Anfragen auf dem Port 843 zu bedienen.

Das Szenario sieht also folgendermaßen aus:

Bevor der eigentliche connect ...
...
arduino.connect("192.168.1.100",5334);
...
ausgeführt wird, fragt der Flash-Player nach einem gültigem "socket policy file" auf dem Server 192.168.1.100 am Port 843. Diese Datei ist quasi die "Erlaubnis", auf weitere Domains oder Ports (hier Serproxy am Port 5334) zuzugreifen.

Hier ein Beispiel für eine einfache "socket policy" Datei:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<!-- Policy file for xmlsocket://192.168.1.100 -->
<cross-domain-policy>
  <allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>

Aus Sicherheitsgründen sollten wirklich nur die benötigten Domains bzw. Ports angegeben werden. (und nicht * für smtl. Domains bzw. Ports)

Hat der Flash-Player nun die "Erlaubnis" auf die angegebenen Ressourcen
zuzugreifen, wird der eigentlich Zugriff auf den Proxy (serproxy) zum ansteuern des
Arduino Boards zugelassen. Yipiiiieh !

Zum Glück können die Requests an den jeweiligen Servern z.B. via ssh verfolgt werden.

Nach einer erfolgreichen "socket policy" abfrage am Port 843, sieht man an der Konsole die Ausgabe:

Listening on port 843
Connection from 192.168.1.1:1550
Valid request received
Sent policy file

bzw. bei einer Anfrage an den Serproxy kann man folgendes beobachten:

Serproxy - (C)1999 Stefano Busti, (C)2005 David A. Mellis - Waiting for clients
server(4) - thread started
Server thread launched

Na dann....
....juhte Nacht !

ZoeVision
 09.02.2009, 10:41Re8
Benutzerbild von ZoeVision
Beiträge: 12
Wohnort: Berlin
Registriert: Dec 2008

Themenautor/in

ANMERKUNG

Falls es doch den einen oder anderen Arduino Flasher gibt der auch die Bibliothek AS3Glue benutzt, hier ein wichtiger hinweis :

Die Firmware "FIRMATA" muss unbedingt mit der AS3Glue Version kompatibel sein, sonst
kommt es zwar zum Verbindungsaufbau, danach ist eine Weitere Verwendung des
Arduino Objektes jedoch nicht möglich.


Hier noch ein nützlicher Link zu diesem Thema:

http://protolab.pbwiki.com
 11.05.2009, 14:30Re9
Benutzerbild von ZoeVision
Beiträge: 12
Wohnort: Berlin
Registriert: Dec 2008

Themenautor/in

Und das kann man dann mit Arduino + Flash (AS3) und div anderen Komponenten realisieren.

IAC 2009


ZoeVision
Geändert von ZoeVision am 11.05.09 um 14:31 Uhr

 
Themen
Ähnliche Beiträge zum Thema
 
AntwortenRegistrieren Seite1

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.
Partner Webseiten: DesignerInAction.de   Designnation.de   Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   PSD-Tutorials.de   Tutorials.de

Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2012 Sebastian Wichmann - Flashhilfe.de