首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何破译ASN/BER分组

如何破译ASN/BER分组
EN

Stack Overflow用户
提问于 2014-02-21 16:57:53
回答 1查看 453关注 0票数 1

我正在用Java语言开发一个SNMP管理器。我目前正在开发一个自定义的ASN/BER编解码器,它得到了Netty的支持。我已经做了一个不错的方式,了解低水平的东西,但我从来没有工作过协议分析。我真的不明白如何从我可以使用的数据包中解密信息。

现在开始讲细节。我知道类型信息是以十六进制值编码到数据包中的,我已经能够通过查看SNMP陷阱数据包的Wireshark输出来识别包中的类型。我不明白的是,我如何才能找到上下文信息?就像这样:

(取自JoeSnmp)

代码语言:javascript
复制
public static final byte OCTETSTRING = (byte) 0x04;
public static final byte APPLICATION = (byte) 0x40;
public static final byte SMI_IPADDRESS = (ASN1.APPLICATION | 0x00);

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

正如您可能知道的那样,我对整个协议分析和网络应用领域都很陌生,所以如果您有任何其他相关资源,我也很乐意查看这些内容:)。

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-21 18:59:36

基本上,应用程序值是一个硬编码常量。应用常数的值来自ASN.1误码率编码规范。在ASN.1误码编码中,每个值都有一个相关的标记和长度。标签由标签类和标签号组成。有四个标记类:通用的、应用程序的、特定于上下文的、私有的.这四个值被编码为标签编码的第一个八位组的位置8和7上的两个位。与应用程序类相对应的位为01 (位8和位7),并以十六进制形式翻译,这给出了0x40位掩码,下面使用该掩码来使用按位操作计算标记值。

有关误码率编码的更多细节,请参见例如http://luca.ntop.org/Teaching/Appunti/asn1.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21940467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档