最新のFlash Playerでは、サーバーと通信するとき、
そこでその文字列を返す方法を探って見たところ、色々方法があったのでメモ。
1.rubyの場合
いまさら画期的な発見!まずは長い前置きから。 最新のFlash Playerでは、SocketまたはXMLSocketを使ってサーバーと通信するとき、最初に\0(\0はNULL文字)という文字列を送信してきます。これに対して\0というような文字列を返してやらないと、まったく通信できません。 これは(HTTPサーバーでホスティングする)crossdomain.xmlファイルとは関係… Flash Player 9,0,115,0のに対処する方法 - Blog by Sadayuki Furuhashi - Blog by Sadayuki Furuhashi |
require ‘socket’
require ‘rexml/document’
if ARGV.empty?
puts “Usage: #{File.basename($0)}”
exit 1
end
policy = File.read(ARGV[0]) + “\0”
REQUEST_LIMIT = 32
def log(addr, msg)
puts “#{addr} #{msg}”
end
srv = TCPServer.open(843)
while true
Thread.start(srv.accept) {|s|
port, addr = Socket.unpack_sockaddr_in( s.getpeername )
begin
log addr, “connection accepted”
buf = “”
begin
buf REQUEST_LIMIT
end until buf.include?(“\0”)
log addr, “received request #{buf.inspect}”
req = REXML::Document.new(buf)
unless req.root.name == “policy-file-request”
raise “invalid request”
end
log addr, “sending policy file”
s.write policy
rescue
log addr, “invalid request: #{$!.inspect}”
ensure
s.close
end
}
end
でも実際につかってみたら、
C:/ruby/socket.rb:16:in `‘: uninitialized constant TCPServer (Na
meError)
from c:/ruby/socket.rb:1:in `require’
from c:/ruby/socket.rb:1:in `‘
っていわれて使えなかったので使うのあきらめた。
PHPの場合
http://ammonlauritzen.com/blog/2007/12/13/new-flash-security-policies/ - ammonlauritzen.com |
<?php
if( posix_getuid() != 0 ) // これはWindows環境では使えない関数なので、Windowsの場合はここを削除
die( “You must run this script as root.\n” );
$sock = @socket_create( AF_INET, SOCK_STREAM, SOL_TCP );
if( !$sock )
die( “Unable to create socket.\n” );
$succ = @socket_bind( $sock, “0.0.0.0”, 843 );
if( !$succ )
die( “Unable to bind to port 843.\n” );
$succ = @socket_listen( $sock );
if( !$succ )
die( “Unable to start listening.\n” );
while( true ) {
$r = $w = $e = array( $sock );
if( @socket_select( $r, $w, $e, null ) !== false ) {
$conn = @socket_accept( $sock );
if( $conn !== false ) {
socket_write( $conn, $policy_file );
socket_close( $conn );
} else {
echo “socket_accept() failed?\n”;
break;
}
} else {
echo “socket_select() failed?\n”;
break;
}
}
socket_close( $sock );
c:\php\php c:\www/socket.phpとコマンドプロンプトで実行しておくことでソケットをまちうけている状態にして、動作することができた。
Javaの場合
import java.net.Socket;
import java.net.ServerSocket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.IOException;
public class socket {
public static final int ECHO_PORT = 843;
public static void main(String args[]) {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(ECHO_PORT);
System.out.println(“Serverが起動しました(port=” + serverSocket.getLocalPort() + “)”);
while (true) {
Socket socket = serverSocket.accept();
new EchoThread(socket).start();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (serverSocket != null) {
serverSocket.close();
}
} catch (IOException e) {
}
}
}
}
class EchoThread extends Thread {
private Socket socket;
public EchoThread(Socket socket) {
this.socket = socket;
System.out.println(“接続されました ” + socket.getRemoteSocketAddress());
}
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// out.println(“"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd\">“);
out.println(““);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null) {
socket.close();
}
} catch (IOException e) {}
System.out.println(“切断されました ” + socket.getRemoteSocketAddress());
}
}
}
Javaだったら大体環境も容易されてるしで、実行しやすいかな?
Adobe Flash CS4 詳細!ActionScript3.0入門ノート[完全改訂版](CD-ROM付)
こんにちは。virapture…
View Comments
This article opened my eyes, I can feel your mood, your thoughts, it seems very wonderful. I hope to see more articles like this. thanks for sharing.
Thanks for sharing. I read many of your blog posts, cool, your blog is very good. https://accounts.binance.com/ru/register-person?ref=T7KCZASX
I don't think the title of your article matches the content lol. Just kidding, mainly because I had some doubts after reading the article. https://www.binance.info/sv/join?ref=V3MG69RO
I don't think the title of your article matches the content lol. Just kidding, mainly because I had some doubts after reading the article.