2012-11-29 5 views
1

나는 flex/amf 트래픽을 읽으려고하는데, 적절한 문서/예제가 부족하여 정말 어렵다.AMF 디코딩 예제

사람이 다음과 같은 RTMP/AMF3 패킷의 디코딩을 통해 저를 걸어 주시겠습니까 :

0x43, 0x00, 0x68, 0xcd, 0x00, 0x01, 0x33, 0x11, 0x00, 0x05, 0x00, 0x40, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x11, 0x0a, 0x81, 0x13, 0x4f, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x13, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x17, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x13, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x11, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x15, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x6f, 0x4c, 0x69, 0x76, 0x65, 0x13, 0x74, 0x69, 0x6d, 0x65, 0xc3, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x09, 0x62, 0x6f, 0x64, 0x79, 0x01, 0x06, 0x29, 0x6c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x0a, 0x0b, 0x01, 0x21, 0x44, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x04, 0x3c, 0x15, 0x44, 0x53, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x06, 0x11, 0x6d, 0x79, 0x2d, 0x72, 0x74, 0x6d, 0x70, 0x73, 0x09, 0x44, 0x53, 0x49, 0x64, 0x06, 0x49, 0x42, 0x45, 0x32, 0x34, 0x31, 0x32, 0x33, 0x34, 0x2d, 0x31, 0x45, 0x31, 0x39, 0x2d, 0x30, 0x33, 0x43, 0x33, 0x2d, 0x39, 0x30, 0x34, 0x43, 0x2d, 0x32, 0x31, 0x36, 0x33, 0x36, 0x36, 0x30, 0x41, 0x42, 0x34, 0x37, 0x46, 0x01, 0x06, 0x17, 0x67, 0x61, 0x6d, 0x65, 0x53, 0x65, 0xc3, 0x72, 0x76, 0x69, 0x63, 0x65, 0x06, 0x49, 0x31, 0x34, 0x43, 0x30, 0x46, 0x42, 0x38, 0x30, 0x2d, 0x46, 0x37, 0x43, 0x34, 0x2d, 0x42, 0x42, 0x34, 0x42, 0x2d, 0x31, 0x46, 0x32, 0x34, 0x2d, 0x34, 0x39, 0x36, 0x32, 0x38, 0x30, 0x42, 0x38, 0x39, 0x33, 0x42, 0x38, 0x01, 0x04, 0x00, 0x04, 0x00, 0x09, 0x01, 0x01 

내 시도한다 :

0x43부터 - 0100 0011 : [01] - 제 1 형 = RTMP 헤더가 될 것입니다 7 바이트. 스트림 ID - 3은이 단일 바이트입니다.

0x4f : flex.messaging.messages.RemotingMessage

0x0d로 :

0x13의 소스 : 작업

또한 길이를 얻을하여 UTF 1 비트 이동하여 다음을 읽어 관리

0x0F의 : 헤더

는 0x17 : 대상

0x13의는 :

0x11을

을 messageID 설명 :

0x15을 clientid는 다음과 같습니다

의 TimeToLive

내 중지 추측, "시간"/ "스탬프"작동하지 않습니다. 물론 다른 모든 바이트 (개체/배열 등) 인코딩 된 이해하는 데 실패합니다;

답변

1
0x43, 0x00, 0x68, 0xcd, 0x00, 0x01, 0x33, 0x11 

1 바이트 +는 7bytes RTMP 헤더 데이터 [0]

0x00, 0x05, 0x00, 0x40, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05 

플렉스 매직 바이트, AMF3 데이터

을의 호출 버전, ID 등

0x11 

시작 함께 할 수있는 뭔가

0x0a..... 
RTMP 약 691,363,210

AMF3 오브젝트 및 정규 AMF3 인코딩 [1]

주, 단일 헤더 바이트 (AMF의 일부) 등 0xc3 위에서 하였다한다 최소 128 바이트로 AMF 데이터 청크 예.

1

나는

AMF0

AMF3

좀 더 예 Wikipedia에서 찾을 수 있습니다를 읽고 시작 했죠.

그리고 아마도 필요하지 않을 RTMP Specification입니다.

다음으로 FluorineFX의 소스 코드를 살펴볼 수 있습니다. 그게 내가 물건을 이해하기 시작 했어. Sources FluorineFX. 내가 한 것은 FluorineFX 소스 코드에서 중단 점을 설정 한 다음 Flex 애플리케이션에서 호출하는 것이 었습니다. 그렇다면 필자는 FluorineFX 소스 코드를 단계별로 이해할 수있었습니다 (AMF 사양과 함께).

사양은 읽기 어렵지만 바이트를 구문 분석하는 데 필요한 모든 것입니다.

어쩌면 this JavaScript AMF project을 살펴볼 수도 있습니다.