我正在用Java语言开发一个SNMP管理器。我目前正在开发一个自定义的ASN/BER编解码器,它得到了Netty的支持。我已经做了一个不错的方式,了解低水平的东西,但我从来没有工作过协议分析。我真的不明白如何从我可以使用的数据包中解密信息。
现在开始讲细节。我知道类型信息是以十六进制值编码到数据包中的,我已经能够通过查看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找到了OCTET_STRING的值,但是他们是如何找到应用程序上下文值的呢?我不想参考答案,我想知道我自己如何才能找到答案。
正如您可能知道的那样,我对整个协议分析和网络应用领域都很陌生,所以如果您有任何其他相关资源,我也很乐意查看这些内容:)。
提前感谢您的帮助!
发布于 2014-02-21 18:59:36
基本上,应用程序值是一个硬编码常量。应用常数的值来自ASN.1误码率编码规范。在ASN.1误码编码中,每个值都有一个相关的标记和长度。标签由标签类和标签号组成。有四个标记类:通用的、应用程序的、特定于上下文的、私有的.这四个值被编码为标签编码的第一个八位组的位置8和7上的两个位。与应用程序类相对应的位为01 (位8和位7),并以十六进制形式翻译,这给出了0x40位掩码,下面使用该掩码来使用按位操作计算标记值。
有关误码率编码的更多细节,请参见例如http://luca.ntop.org/Teaching/Appunti/asn1.html。
https://stackoverflow.com/questions/21940467
复制相似问题