AMF形式に関するAdobeのドキュメントでは、AMFメッセージ全体の構造が実際に指定されているようには見えません。個々のデータ型の形式のみを指定します。私はいまいましいことを5回読みましたが、実際のAMFメッセージに含まれるべきものが完全に欠落しているか、そこにありません。実際のメッセージ全体の構造に関するドキュメントを知っている人はいますか?
3 に答える
仕様は「簡潔」と表現される場合があります。
AMFエンコーディングは、「タイプマーカー」と呼ばれるバイトを使用します。整数のタイプマーカーは値4です。整数データはこのタグの直後にあり、長さは1〜4バイトです。整数型は「圧縮」されているため、長さは異なります。0〜127の値は1バイトしか必要としませんが、値が大きいほど、より多くのバイトが必要になります。この整数形式は、仕様では「U29」と呼ばれています。
例として、整数「5」を単純に渡す場合、有効なAMFパケットは次の2バイトになります。
04 05
Webで見つかったアプリケーションでは、AMFデータの前に、ネットワークバイトオーダーでunsignedlongとしてエンコードされた長さが付いている場合があります。このようなアプリケーションを観察している場合は、次のように表示される場合があります。
00 00 00 02 04 05
ここで、00 00 00 02
は、次のAMFデータの長さが2バイトであることを示しています。
ここで、次のコンストラクターを持った後にオブジェクトを送信したとします。
this.ui = "button_press"; this.param = 5;
次に、AMFデータに次のように表示される場合があります。
0A
-オブジェクトタグ
2B
-u29o-val:2つの封印されたメンバー、特性とデータを持つオブジェクト、場合によっては動的メンバー
01
-空の文字列-匿名オブジェクト
05
-値による文字列、文字列の長さ:2
75 69
- 'ui'-
0B
値による文字列、文字列の長さ:5
70 61 72 61 6D
- 'param'-値ごとの
19
文字列、文字列の長さ:12
62 75 74 74 6F 6E 5F 70 72 65 73 73
-'button_press'-
04
整数
05
-整数の値:5-
01
空の名前、このオブジェクトの動的メンバーの空のリストを終了します
そのパケットは28バイトを使用するため、実際に検出された場合は、プレフィックスとして:が付けられる場合があります00 00 00 1C
。
考慮すべきもう1つの可能性は、AMF通信が圧縮される可能性があることです。通常、zlibで使用可能な「deflate」圧縮を使用します。
これが仕様の整理に役立つことを願っていますが、ご不明な点がございましたら、お答えしたいと思います。
リモーティングメッセージ構造を探している場合は、AMF0仕様の最後に追加されます-セクション4
wikihttp ://en.wikipedia.org/wiki/Action_Message_Formatを参照することもできます 。必要な情報が十分にあります。
ありがとう、ラジェッシュ。