2012-02-07 64 views
0

我一直試圖讓我的頭在SNMP數據包格式一段時間,但我仍然不知道我已經得到它。這裏的一些看法,我認爲我有正確的,但我不知道:SNMP數據包格式

  1. 每個數據包是一組不同類型的嵌套的數據元,由一個類型,長度和一些數據。
  2. OID的前兩個部分總是1.3,並被編碼爲單個字節。
  3. 如果後續部分的數值小於128,則將其編碼爲一個字節。
  4. 將大於127的OID部分編碼爲多個字節,其值由7個最低有效位確定,並設置最高有效位除了最後一個字節之外的所有字符都爲1
  5. 一些數據類型ID是官方的(整數,字符串等),但有些是專有的和設備特定的。

我真的不明白的是如果一個特定值的長度是如何編碼的,如果該值超過255個字節。使用Wireshark,我發現對於256以下的長度,長度字段是1個字節,但對於長度大於256的字段,該字段被分成多個字節。但是,較大的OID部件號中使用的編碼似乎不適用。

我無法在RFC中找到關於此的任何內容(無論如何,其中大約有30個)來幫助我。

有人可以爲我澄清這一點,並確定我上面提出的意見是正確的嗎?

回答

1

使用ASN.1的子集定義SNMP。有一個bunch of standards描述它; X.690涵蓋了基本的二進制編碼。

+0

這些文章中的信息非常模糊和混亂,因此我發佈了一個問題以要求澄清。 – Polynomial 2012-02-08 08:58:55

+0

您似乎錯過了SNMP使用ASN.1的關鍵點,特別是BER編碼。維基百科的文章鏈接到這個鏈接:http://en.wikipedia.org/wiki/Basic_Encoding_Rules,鏈接到這個:http://luca.ntop.org/Teaching/Appunti/asn1.html,它給出了編碼的詳細概述,以及各種數據類型的示例編碼。 – arx 2012-02-08 12:32:29

+0

謝謝。我想我現在已經完成了大部分工作。 – Polynomial 2012-02-08 14:20:41