我正在嘗試編寫一個SNMP代理程序,坦率地說,整個過程就像閱讀有限的立體聲指令一樣。但是我很接近,除了一個問題:實現GETNEXT操作。SNMP OID樹步行
考慮系統OID空間的以下塊:
.1.3.6.1.2.1 .1.5.0
.1.6.0
.1.8.0
.1.9.1 .2.1
.2.2
.2.3
對於確定性,讓我們說,我想這樣做
$ snmpwalk -On -v 2c -c public localhost .1.3.6.1.2.1.1.8.0
的net-snmp首先執行GET上實現了這一點。 1.8.0,然後是GETNEXT。 GETNEXT應該從.1.8.0到.1.9.1.2.1,然後是.1.9.1.2.2等等。
我認識到這是概念僅僅是一個深度第一次散步,但由於某些原因 - 年齡,也許 - 我不能想出一個乾淨的方式來實現該搜索時,它必須找到GET節點,然後備份下一個呼叫並找到「下一個」節點。
隨意告訴我,這是愚蠢的簡單。
更新
我寫這一個26小時編程回合後,我可以想像,目前還不清楚。這裏的問題是:
我需要一個函數後繼它需要一個OID作爲輸入,並返回下一個OID - 其中下一個深度優先順序,由SNMP工具實現。我有幾個解決方案可以通過深度優先順序枚舉OID並等待正確的OID進行工作。我在尋找一個比O(l + n)更好的優雅例子,其中l是OID的長度,n是OID的數量。
那麼,你的意思是你不明白爲什麼Net-SNMP在一開始就發送GET消息?我也不知道,因爲其他工具包(如#SNMP)中的snmpwalk不執行此額外的GET。 –
這就是另外一個問題,即如何確定一個被認爲是一個長期建立的標準的東西,最終會導致這麼多相互矛盾的行爲。 –
不幸的是,walk不是標準的一部分(與GET/GET NEXT/SET等相比,RFC文檔都沒有強調它)。因此,對於這樣的非標準操作,供應商可以自由地以不同的方式實施。 –