rtmp協議在傳輸script資料onmetadata時使用amf(action message format)格式封裝。
amf_type對應的編號:
[amf_type]+[data length]+[data]
1)字串
amf_string和amf_long_string都是存字串,amf_string的字串的長度佔2個byte,不能超過65536-1,amf_long_string的長度佔4個byte。以amf_string為例:
第乙個byte是2,接著是2個byte的[data length]表示字串的長度,接著是字串的內容。
2)數字
amf_number,第乙個byte是0,接著是4個byte的數字內容。
3)bool值
amf_boolean,第乙個byte是1,接著是1個byte的bool值。
4)陣列
開頭用amf_ecma_array表示,結尾用amf_object_end表示,中間寫入陣列的內容。
amf_ecma_array開頭:第乙個byte是8,接著是4個byte的[array length]表示陣列的成員數。
amf_object_end結尾:2個byte的資料全是0,接著乙個byte是9。
amf_ecma_array的陣列內容裡是先插入乙個字串資料的name,然後再插入乙個具體類似資料的value。
如下面所示的抓包內容就是:
以下是wireshark抓包的結構:
rtmp header
01.. .... = format: 1
..00 0011 = chunk stream id: 3
timestamp delta: 0
timestamp: 0 (calculated)
body size: 219
type id: amf0 data (0x12)
rtmp body
string 'onmetadata'
ecma array (10 items)
amf0 type: ecma array (0x08)
array length: 10
property 'title' string 'ipc'
property 'width' number 640
property 'height' number 480
property 'framerate' number 25
property 'videocodecid' number 7
property 'audiocodecid' number 8
property 'audiodatarate' number 64
property 'audiosamplerate' number 8000
property 'audiosamplesize' number 16
property 'stereo' boolean true
end of object marker
個人部落格**:靈動的指標 RTMP協議分析 二 AMF資料
rtmp包預設的最大長度為128位元組,或通過chunksize改變rtmp包最大長度 當amf資料超過128byte的時候就可能有多個rtmp包組成,如果需要解碼的rtmp包太長則被tcp協議分割成多個tcp包.那麼解碼的時候需要先將包含rtmp包的tcp封包合併,再把合併的資料解碼,解碼後可得到...
RTMP協議分析 二 AMF資料
型別說明 objtype 資料 datasize core string 0x02 2位元組 2位元組的資料紀錄了string的實際長度 core object 0x03 0位元組 開始巢狀0x00000009表示巢狀結束 null 0x05 0位元組 空位元組無意義 core number 0x0...
amf資料解碼
這兩天測試 發現了乙個flex架構 amf協議的站點。別說注入和跨站了,連傳送包和返回包的資料都看不明白,在嘗試各種前端輸入無果後,決定研究一下這個少見的技術組合。flex是用來做flash展示的,主要用來做頁面呈現,不深究 主要是amf協議資料了。通過查詢發現python擁有amf處理模組,ver...