2014-02-21 37 views
1

我正在使用Java语言在SNMP管理器上工作。我目前正在研究一种由Netty的强大功能支持的定制ASN/BER编解码器。我做了一个体面的方式,理解低层次的东西,但是我从来没有使用过协议分析。我真的不明白如何解密我可以使用的数据包中的信息。如何解码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的价值,但他们是如何找到应用程序上下文值?我不想要参考答案,我想知道如何找到答案,我自己看着数据包。你可能会说,我是整个协议分析和网络应用领域的新手,所以如果你有任何其他相关资源,我也很乐意看看那些:)。

在此先感谢您的帮助!

回答

0

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

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

+0

谢谢你的深思熟虑和翔实的答案,它帮助清除了一些东西! –