2011-12-03 16 views
3

私は単純なPython Websocketサーバーを構築しようとしています。私はハンドシェイクとそのすべてのことをすることができました。しかし、私はブラウザから受け取ったメッセージをどのようにデコードするのか分かりませんが、これはサーバが受け取るものの生の出力です:'xÙõKþ°pãüCY。どのように私はそれを解読するはずですか?websocket経由でデコードされたデータ

+0

あなた自身でwebsocketプロトコルを実装しましたか、または多くの既存のライブラリ(どちらか)を使用しましたか? Websocketプロトコルの多くのバージョンのどれがあなたのブラウザとサーバーの間で実際に使用されていますか?あなたは最小の例を含めることができますか? –

+0

私はchromeでテストしています。バージョン8と思われます。私はwebsocketライブラリを使用していません。デフォルトのソケットライブラリです。 –

+0

この回答を見ると完全に動作しますhttp://stackoverflow.com/a/9778823/1193863 – naren

答えて

3

WebSocketプロトコルには、framing protocolが含まれています。ブラウザは生のアプリケーションバイトをサーバーに送信するだけではなく、その逆もあります。生のバイトを抽出するためにフレーミングプロトコルを解析する必要があります。

この解析を行うために、多くのライブラリが実装されています。おそらくそのうちの1つを試してみてください。そのようなライブラリの1つはhttp://pypi.python.org/pypi/txWS/0.6.1ですが、それが適切でない場合は、少しの検索で他のものを見つけることができます。

0

クライアントから送信するメッセージは何ですか?そして、Chrome 8を使用していることを確認してください(7バージョンは古くなっています)。実際に最近のChromeを使用している場合は、ペイロードのマスクを解除できなかった可能性があります。最新のバージョンのプロトコル(HyBiシリーズ)のすべてのクライアントからサーバーへのデータは、4バイトのXORマスクを使用して、壊れた仲介者が悪意のあるJavascriptによってハイジャックされるのを防ぎます。

クライアントからサーバーへのペイロードマスキングについては、section 5.3 of the specを参照してください。

また、ペイロードデータはUTF-8でエンコードされていることに注意してください(古いプロトコルでも)。ASCII文字列として扱うことはできません。

+0

メッセージは単純な「Hello World!」です。私はWebsocketバージョンが8であることを意味していました(ブラウザがハンドシェイク中にSec-WebSocket-Version:8を送信します)。ペイロードのマスキング解除については、すべてのバージョンで同じように動作しますか? –

+0

次に、ペイロードのマスクを解除する必要があります。ペイロードの最初の4バイトはマスクです。これらは、以下のペイロードストリームとXORされる必要があります。導入されて以来、マスキングフォーマットは変更されていません。 – kanaka

関連する問題