2014-06-05 91 views
0

我週一發佈了這個到net-snmp郵件列表並沒有回覆,所以我在這裏嘗試。 我很困惑,希望有人能幫忙。是請求標識asn.1編碼?

我正在爲Cortex M4應用程序編寫SNMP代理。 我已經購買的SNMP書籍以及我在網上閱讀過的書籍表明,所有數據字段都應該是ASN.1編碼的。我知道OID是ASN.1編碼的。我不確定這是否適用於其他字段,如請求ID。

查看由net-snmp發送的snmp命令,看起來Request ID字段是一個簡單的(4字節)32位整數。 這裏是表示通過Wireshark的監視的事務的snmpget的屏幕截圖:

http://www.ko4bb.com/net-snmp/RequestID.png

它顯示的RequestID爲1750020546(十進制)和0x684F31C2十六進制。 Wireshark中的數據字段也顯示爲「68 4f 31 c2」

這不是ASN.1編碼的,否則前3個字節將其第7位設置爲1,最後一個字節會設置第7位爲0,這意味着前3個值應該> 0x7F,最後一個值應該是< 0x80

那麼ASN.1不用於請求ID字段嗎?

回答

2

我添加了wireshark標記,因爲這純粹是一個Wireshark問題。

請求ID字段嚴格按照ASN.1 BER格式,即02 04 68 4f 31 c2

你應該小心Wireshark太聰明瞭,無法解析數據並隱藏你的一些細節。

請檢查突出顯示68 4f 31 c2的底框面板。 Wireshark突出顯示它們,但有意忽略02 04。那就是問題所在。

正如@GuyHarris在評論中指出的,這個Wireshark行爲是可配置的。其他數據包分析器(如Microsoft網絡監視器)在相同的情況下可能會有不同的表現。

+0

「請求ID字段嚴格按照ASN.1格式,即」02 04 68 4f 31 c2「。」這是ASN.1基本編碼規則(BER)格式; ASN.1沒有指定編碼(還有壓縮編碼規則)。 「你應該小心Wireshark太聰明瞭,無法解析數據並隱藏你的一些細節。」如果您爲BER協議啓用Wireshark的「顯示內部BER封裝令牌」首選項,它將向您顯示這些詳細信息;這只是不會成爲默認設置。 –

+0

謝謝,但這不是我的問題。 02 04 68 4f 31 c2似乎不是ASN.1 BER編碼。 ASN.1 BER的定義表明,如果該值大於127,則第一個字節包含7個LSB上的數據,並將第7位設置爲1,然後將餘數編碼到下一個字節。例如,值42564應該編碼爲0x82,0xCC,0x44,或者如果包含頭0x02,0x03,0x82,0xcc,0x44。看起來,net-snmp只是將整數值編碼爲4個字節,而不考慮值。我還沒有找到強制net-snmp發出請求ID值爲1或2的方法。 – Didier

+0

這是整數在OID字段中編碼的方式。看來這個編碼規則只適用於OID,可能這是我的錯誤。 – Didier