【问题标题】:how to tell what kind of asn1 i'm receiving如何判断我收到的是哪种 asn1
【发布时间】:2011-05-25 00:44:30
【问题描述】:

我正在慢慢理解 asn1 符号。从结构编码 asn1 似乎很容易。但是将 asn1 解码到我的应用程序更难。我想知道我是否有一个应用程序在 udp 端口​​ 600 上接收数据,这可能是多个 asn1 结构,我如何判断我应该解码到哪个 asn1 结构?

那么,当我收到 asn1 数据包时,我们是否首先确定它的类型并根据它的类型对其进行解码?

或者我的 asn1 编译器会为我处理这个吗?

很难找到这些东西的例子......即使是谷歌;-)。

一个概述使用 asn1 构建简单网络服务器的教程会很棒!

【问题讨论】:

    标签: network-programming network-protocols asn.1


    【解决方案1】:

    ASN.1 大致对应于OSI seven-layer cakePresentation Layer。它依赖Application Layer 来确定端点之间交换的信息类型。因此,没有通用标头或标识符可以指示 ASN.1 流正在呈现哪个协议或语法。这可以通过端口号隐含,或者通过附加协议层(例如 HTTP)明确。


    编辑(回复您的评论):ASN.1 standard 定义了四个“类”标签:UNIVERSAL、APPLICATION、PRIVATE 和 CONTEXT-SPECIFIC。 APPLICATION 基本上意味着该标签被定义为在特定应用程序中使用(即,它没有预定义为 ASN.1 的一部分。)但是 APPLICATION 标签没有携带足够的信息来指定(甚至暗示)哪个应用正在使用中。

    (实际上,“APPLICATION”、“PRIVATE”和“CONTEXT-SPECIFIC”之间的语义差异很小;这三个类主要用于历史和文体原因。)

    【讨论】:

    • 那么 [APPLICATION 10] 指的是什么。我正在处理的协议有很多不同的请求,在同一个 udp 端口​​上......如果我在不同的数据包上运行 asn1 转储,我会得到这个不同的标头 0 166:[APPLICATION 10] { 3 163:SEQUENCE { 6 3:[1] { 8 1:整数 5:} 11 3:[2] { 13 1:整数 10:}
    • 所以我假设如果我正在编写一个 asn1 解码器,我会先看看这个,以确定我正在处理什么样的请求。
    • @user499211:不,我不是这么说的。 ASN.1 消息根本不需要使用 APPLICATION 标签。 (查看 RFC 1157 (rfc-editor.org/rfc/rfc1157.txt) 末尾的语法——看不到 APPLICATION 标记。)如果许多不同类型的请求可以找到到达您的解码器的方式,您需要一些其他方式来区分它们.例如,可以使用 HTTP 标头来指示您收到的请求类型。
    • 还可以查看 ASN.1 的 XML 编码规则 (XER):itu.int/ITU-T/studygroups/com17/languages/X.693-0112.pdf 在该文档第 8-9 页(按页码)的示例中,XML 编码的message 根本不携带类信息——没有标签被标记为 APPLICATION、CONTEXT-SPECIFIC、UNIVERSAL 或 PRIVATE。那是因为这些类真的不是很有意义!
    • 您还可以为每种请求使用一个 ASN.1 结构,并且只接受一个通用结构,这是您所有可能的请求结构之间的选择。
    猜你喜欢
    • 1970-01-01
    • 2012-02-26
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 2023-03-27
    相关资源
    最近更新 更多