我正在为完整的 M3UA-SCCP-TCAP-MAP 堆栈(通过 SCTP)编写一个模拟器(用于学习目的)。到目前为止,M3UA+SCCP 堆栈都可以。
M3UA 基于 RFC 4666 2006 年 9 月 SCCP 基于 ITU-T Q.711-Q716 TCAP 基于 ITU-T Q.771-Q775
但是在解码 TCAP 部分时,我迷失了 dialogPortion。TCAP 是 asn.1 编码的,所以一切都是 tag+len+data。Wireshark 对它的解码与我的解码器不同。
消息是:62434804102f00676b1e281c060700118605010101a011600f80020780a1090607040000010005036c1ba1190201010201163011800590896754f282859106
基本上,我的消息被 BER 解码为
注:格式:hex(tag) + (BER 拆分为 CLS+PC+TAG 十进制) + hex(data) 62 ( 64 32 2 ) 48 ( 64 0 8 ) 102f0067 6b (64 32 11) 28 ( 0 32 8 ) 06 ( 0 0 6 ) 00118605010101 OID=0.0.17.773.1.1.1 a0 ( 128 32 0 ) 60 ( 64 32 0 ) 80 ( 128 0 0 ) 0780 a1 ( 128 32 1 ) 06 ( 0 0 6 ) 04000001000503 OID=0.4.0.0.1.0.5.3 6c ( 64 32 12 ) ...
所以我可以看到包含 otid[8]、dialogPortion[11] 和 componentPortion[12] 的 begin[2] 消息。otid 和 ComponentPortion 被正确解码。但不是对话框部分。dialogPortion 的 ASN 未提及任何这些代码。更令人困惑的是,wireshark 以不同的方式对其进行解码(oid-as-dialogue 不在 dialogPortion 中,而是作为 otid 之后的一个字段,这与 ITU-T 文档中的描述不同——或者不是我所理解的)
Wireshark 解码交易能力应用部分 开始 源交易 ID 编号:102f0067 oid:0.0.17.773.1.1.1(id-as-dialogue) 对话请求 填充:7 协议版本:80(版本1) 1 ... .... =版本1:真 应用程序上下文名称:0.4.0.0.1.0.5.3 (locationInfoRetrievalContext-v3) 组件:1 件 ...
我在 dialogPDU ASN 中找不到任何有关填充的参考。
有人可以指出我正确的方向吗?我想知道如何正确解码此消息
在这种情况下,DialoguePDU 格式应该很简单:
dialogue-as-id OBJECT IDENTIFIER ::= {itu-t recommendation q 773 as(1) dialogue-as(1) version1(1)}
DialoguePDU ::= CHOICE {
dialogueRequest AARQ-apdu,
dialogueResponse AARE-apdu,
dialogueAbort ABRT-apdu
}
AARQ-apdu ::= [APPLICATION 0] IMPLICIT SEQUENCE {
protocol-version [0] IMPLICIT BIT STRING {version1(0)} DEFAULT {version1},
application-context-name [1] OBJECT IDENTIFIER,
user-information [30] IMPLICIT SEQUENCE OF EXTERNAL OPTIONAL
}