2017-09-26 258 views
0

我需要那種SNMP v2c的代理(在python),其中:SNMP代理

  • snmpset命令從命令
  • 讀值反應並將它寫入YAML文件
  • 運行自定義行動(喜歡在不同的線程並以某種方式回覆成功snmpset命令):
    • 運行另一個snmpset到不同的機器,或
    • SSH用戶@主機和運行一些命令,或
    • 運行一些本地工具

和:

  • SNMPGET命令
  • 校驗值的反應在yaml文件中請求oid
  • 返回此值

我知道pysnmp,但文檔只是混淆了我。我可以形象我需要某種類型的命令responder(我需要snmp v2c)和一些對象來存儲配置/值形式yaml文件。但我完全失去了。

回答

1

我認爲你應該能夠實現所有與pysnmp。從技術上講,這不是SNMP代理,而是SNMP命令響應者。

你或許可以採取this script爲原型,並實現你的(單)cbFun它(像在原型)接收其類型(GETSET你的情況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編寫一個自定義變體插件,該插件很大程度上可以完成您所描述的任務。

+0

我看到這個例子,我覺得它最適合我。通過處理程序你的意思是cbFun?我應該爲獲取和設置定義兩個cbFun還是隻定義一個(有一些if內部)?我如何註冊/鏈接到transportDispatcher? – emcek

+0

@emcek更新了答案 –