なんとなくですが、AMFのパケットの中身はどうなっているのだろうか?と思い立って調べてみました。
Googleで、「AMF パケット 仕様」で調べた結果、AdobeがAMF規格の仕様をPDFファイルで公開していたのを見つけました。
AMF0 http://opensource.adobe.com/wiki/download/attachments/1114283/JP_amf0_spec_121207.pdf
AMF3 http://opensource.adobe.com/wiki/download/attachments/1114283/JP_amf3_spec_121207.pdf
上のPDFですと私自身はいまひとつ分かりにくかったので、以下表にして簡単にまとめてみました。
AMFパケットの仕様
| 項目 | 型 | 説明 | |
|---|---|---|---|
| AMFパケットのバージョン | U16 |
AMFパケットのバージョン AMF3=3 AMF0=0 |
|
| ヘッダー数 | U16 | ヘッダーの数 | |
|
ヘッダー ※ヘッダー数分繰り返す |
ヘッダー名称サイズ | U16 | ヘッダー名称の文字列長 |
| ヘッダー名称 | UTF8 |
ヘッダー名称 文字列の長さはヘッダー名称サイズ |
|
| ヘッダーのバイト長 | U32 |
ヘッダーのバイト長 ※わからない場合は(U32)-1 |
|
| value-type | |||
| AMFメッセージ数 | U16 | AMFメッセージ(ボディ)の数 | |
|
AMFメッセージ部 ※AMFメッセージ数分繰り返す |
ターゲットURIサイズ | U16 | ターゲットURIの文字列長 |
| ターゲットURIサイズ | UTF8 |
ターゲットURI名称 文字列の長さはターゲットURIサイズ |
|
| レスポンスURIサイズ | U16 | レスポンスURIの文字列長 | |
| レスポンスURIサイズ | UTF8 |
レスポンスURI名称 文字列の長さはレスポンスURIサイズ |
|
| メッセージのバイト長 | U32 |
メッセージのバイト長 ※わからない場合は(U32)-1 |
|
| value-type | |||
U8 = 符号なしのバイト、8 ビットのデータ、オクテット
U16 = ビッグエンディアン(network)バイトオーダで記された符号なしの16 ビット整数
U32 = ビッグエンディアン(network)バイトオーダで記された符号なしの32 ビット整数
ドキュメントを読んでも、value-type の部分がいまいち謎です。
こういうことに今まで興味がわかなかったのは技術者としては?でしょうが、今回調べたことでAMFの中身についてある程度知ることができました。
そのうち、パケット解析ツールなどを使用して実際のデータを除いてみたいと思います。