我認爲你應該能夠實現所有與pysnmp。從技術上講,這不是SNMP代理,而是SNMP命令響應者。
你或許可以採取this script爲原型,並實現你的(單)cbFun
它(像在原型)接收其類型(GET
或SET
你的情況SNMP命令)的PDU和樹枝。然後,您可以實現從GetRequestPDU
分支中的.yaml文件中讀取的值以及.yaml文件寫入,以及在SetRequestPDU
分支中的其他地方發送SNMP SET命令。
我們在這裏講的pysnmp API是低級別的。有了它,你不能要求pysnmp在回調函數之間路由消息 - 它總是對所有消息類型調用相同的回調函數。
但是,您也可以將您的工具基於與SNMPv3模型一起引入的更高級別的SNMP API。有了它,您可以根據它們支持的PDU類型註冊自己的SNMP應用程序(有效的回調)。但是鑑於你只需要SNMPv2c支持,我不確定更高級別的API最終是否會得到回報。
請記住,SNMP通常是時間敏感的。如果在其他地方運行本地命令或SSH需要花費幾秒鐘的時間,標準SNMP管理器可能會開始重試並可能最終超時。如果你看看Net-SNMP的snmpd
是如何工作的 - 它會運行外部命令並將結果緩存幾秒鐘。這可以讓SNMP管理器最終得到一個稍微過時的響應。
或者,您可以考慮爲SNMP simulator編寫一個自定義變體插件,該插件很大程度上可以完成您所描述的任務。
我看到這個例子,我覺得它最適合我。通過處理程序你的意思是cbFun?我應該爲獲取和設置定義兩個cbFun還是隻定義一個(有一些if內部)?我如何註冊/鏈接到transportDispatcher? – emcek
@emcek更新了答案 –