【问题标题】:How to decipher ASN/BER packets如何破译 ASN/BER 数据包
【发布时间】:2014-02-21 16:57:53
【问题描述】:

我正在使用 Java 语言开发 SNMP 管理器。我目前正在开发由 Netty 支持的自定义 ASN/BER 编解码器。我已经取得了不错的方法并理解了低级的东西,但我以前从未使用过协议分析。我真的不明白如何从我可以使用的数据包中解密信息。

现在谈具体情况。我知道类型信息以十六进制值编码到数据包中,通过查看 SNMP 陷阱数据包的 Wireshark 输出,我能够识别数据包中存在的类型。我不明白的是如何找到上下文信息?像这样:

(取自 JoeSnmp)

public static final byte OCTETSTRING = (byte) 0x04;
public static final byte APPLICATION = (byte) 0x40;
public static final byte SMI_IPADDRESS = (ASN1.APPLICATION | 0x00);

我已经能够通过查看 SMI RFC 找到 OCTET_STRING 的值,但是他们是如何找到应用程序上下文值的?我不想参考答案,我想知道如何自己查看数据包找到答案。

您可能会说,我是整个协议分析和网络应用领域的新手,所以如果您有任何其他相关资源,我也很乐意查看这些资源:)。

提前感谢您的帮助!

【问题讨论】:

    标签: java networking protocols netty asn.1


    【解决方案1】:

    基本上,APPLICATION 值是一个硬编码常量。 APPLICATION 常量的值是从 ASN.1 BER 编码规范中获得的。在 ASN.1 BER 编码中,每个值都有一个关联的标签和长度。一个标签由标签类和标签号组成。有四个标记类:通用的、应用程序的、特定于上下文的、私有的。这四个值在标签编码的第一个八位字节的位置 8 和 7 上被编码为两个位。对应于应用程序类的位是 01(位 8 和位 7),并以十六进制转换得到 0x40 位掩码,它在下面用于使用按位运算计算标记值。

    有关 BER 编码的更多详细信息,请参阅例如 http://luca.ntop.org/Teaching/Appunti/asn1.html

    【讨论】:

    • 感谢您提供深思熟虑且内容丰富的答案,它帮助解决了一些问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多