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()
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...");
}
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
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 ?!
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 ?
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 ...
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
ö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
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
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.
12.01.12, 18:50 #Jobs Flash Freelancer für ca. 2 Wochen in München gesucht http://t.co/XpMJr5dv
10.01.12, 10:45 #PureMVC vs #RobotLegs Performance Battle. PureMVC is significantly faster than RobotLegs in nearly every respect. http://t.co/324gWRAr