2014-02-21 36 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

謝謝你的深思熟慮和翔實的答案,它幫助清除了一些東西! –