我週一發佈了這個到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字段嗎?
「請求ID字段嚴格按照ASN.1格式,即」02 04 68 4f 31 c2「。」這是ASN.1基本編碼規則(BER)格式; ASN.1沒有指定編碼(還有壓縮編碼規則)。 「你應該小心Wireshark太聰明瞭,無法解析數據並隱藏你的一些細節。」如果您爲BER協議啓用Wireshark的「顯示內部BER封裝令牌」首選項,它將向您顯示這些詳細信息;這只是不會成爲默認設置。 –
謝謝,但這不是我的問題。 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
這是整數在OID字段中編碼的方式。看來這個編碼規則只適用於OID,可能這是我的錯誤。 – Didier