2012-02-20 12 views
0

特定のポートへの接続時に、xampp/wampベースのApacheサーバーでカスタム要求に応じてカスタム応答を送信するにはどうすればよいですか?xampp/wampベースのApacheサーバーのカスタム返信

フラッシュアプ​​リケーションがクロスドメインhttp GETリクエストを許可するようリクエストしています。\ 0に返信しようとしています。

デフォルトでポート843にフラッシュポリシー要求が行われていますので、そのまま使用したいと思います。

ポートは\ 0を取得します(ヌル文字で終わる、\ 0は参考値である)とのようなもので応答する必要があります。私の知る限りでは、要求が復帰する必要があります

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd"> 
    <cross-domain-policy> 
     <site-control permitted-cross-domain-policies="master-only"/> 
     <allow-http-request-headers-from domain="*" headers="*" secure="true" /> 
     <allow-access-from domain="*" to-ports="*" /> 
    </cross-domain-policy> 

Content-typeは必要であるかもしれないが、プレーンテキストとして。

私は以下を試してみました:http://socketpolicyserver.com/そして、ポートを待ち受けても接続は受け付けますが、要求に応じて指定されたxmlで応答しません。適切な応答を達成するための任意の方法/方法が理解されるであろう

、に関して

マイク。 !

--- UPDATE --->

私はポート843をリッスンシンプルなC#のWebサーバーを書き、前述のポリシーを提供しています - のためにSecureSocket接続を使用する場合、しかし、それだけで罰金を働きました安全な接続(つまり、HTTPS/SSLプロトコルへのソケットのオープン) - 送信される要求は、ホスト証明書を使用して暗号化されます。私が知る限り、サーバーの証明書を聴いたり取得したり、外部のアプリケーションを介してデータを解読する方法はありません。唯一の方法は、適切なリクエストが送信された後にApacheがクロスドメインポリシーを返すように教えることです。適切なポート。

私が持っているもう一つのアイデアは、サーバー自体に何が起こっているかにかかわらず、Apacheディレクトリに格納されているサーバーの証明書ファイルを読み取ることです。

あなたのコメントをお待ちしております。

マイクだからここ

答えて

0

は私が最終的にそれを解決した方法は次のとおりです。

私はいくつかの変更で、この男のコードを使用しました:http://www.switchonthecode.com/tutorials/csharp-tutorial-simple-threaded-tcp-server

を、ポート843に耳を傾け、簡単なマルチスレッドのWebサーバーを作成し、やや一般を提供します適切なフラッシュ要求に基づいてポリシーを適用します。

アドビによって提供されたいくつかの例がありましたが、何らかの理由でウィンドウズが好きではありませんでした。

また、FlashのSecureSocketオブジェクトを使用している場合は、ターゲットサーバ(IIS '/ Apaches'/Tomcats 'など)のSSL認証情報を使用し、クライアントの公開鍵ターゲットサーバの証明書、それから再びこのコードはSSLサポートを持っていないかもしれませんが、これまでのところC#のSSLストリームを使って実装し始めました。 SSLを介して動作させることができる場合は、教えてください。

希望小売価格:

マイク。

using System; 
using System.Text; 
using System.Net.Sockets; 
using System.Threading; 
using System.Net; 
using System.IO; 

namespace TCPSexyServer 
{ 
    class Server 
{ 
    private TcpListener tcpListener; 
    private Thread listenThread; 

    private void ListenForClients(int p) 
    { 
     throw new NotImplementedException(); 
    } 

    public Server() 
    { 
     this.tcpListener = new TcpListener(IPAddress.Any, 843); 
     this.listenThread = new Thread(new ThreadStart(ListenForClients)); 
     this.listenThread.Start(); 
    } 

    private void ListenForClients() 
    { 
     this.tcpListener.Start(); 

     while (true) 
     { 
      //blocks until a client has connected to the server 
      TcpClient client = this.tcpListener.AcceptTcpClient(); 

      //create a thread to handle communication 
      //with connected client 
      Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm)); 
      clientThread.Start(client); 
     } 
    } 

    private void HandleClientComm(object client) 
    { 
     TcpClient tcpClient = (TcpClient)client; 
     NetworkStream clientStream = tcpClient.GetStream(); 
     byte[] message = new byte[4096]; 
     int bytesRead; 

     while (true) 
     { 
      bytesRead = 0; 

      try 
      { 
       //blocks until a client sends a message 
       bytesRead = clientStream.Read(message, 0, 4096); 
      } 
      catch 
      { 
       //a socket error has occured 
       break; 
      } 

      if (bytesRead == 0) 
      { 
       //the client has disconnected from the server 
       break; 
      } 

      //message has successfully been received 

      UTF8Encoding encoder = new UTF8Encoding(); 

      string sentData = encoder.GetString(message, 0, bytesRead); 
      Console.WriteLine(sentData); 
      if (sentData == "<policy-file-request/>\0") 
      { 
       String policy = "<?xml version=\"1.0\"?>\n" + 
           "<!DOCTYPE cross-domain-policy SYSTEM \"/xml/dtds/cross-domain-policy.dtd\">\n" + 
           "<cross-domain-policy>\n" + 
           "<site-control permitted-cross-domain-policies=\"master-only\"/>\n" + 
           "<allow-http-request-headers-from domain=\"*\" headers=\"*\" secure=\"true\" />\n" + 
           "<allow-access-from domain=\"*\" to-ports=\"*\" />\n" + 
           "</cross-domain-policy>\0"; 
       byte[] buffer = encoder.GetBytes(policy); 
       clientStream.Write(buffer, 0, buffer.Length); 
       clientStream.Flush(); 
       Console.WriteLine(policy); 
      } 
      else 
      { 
       tcpClient.Close(); 
      } 
      System.Diagnostics.Debug.WriteLine(encoder.GetString(message, 0, bytesRead)); 
     } 

     tcpClient.Close(); 
    } 

     public static void Main(string[] args) 
     { 
      Server blah = new Server(); 
     } 

    } 
} 
関連する問題