Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x python中的snmp代理_Python 3.x_Snmp_Pysnmp - Fatal编程技术网

Python 3.x python中的snmp代理

Python 3.x python中的snmp代理,python-3.x,snmp,pysnmp,Python 3.x,Snmp,Pysnmp,我需要一种snmp v2c代理(python),它: 对snmpset命令作出反应 从命令中读取值并将其写入yaml文件 运行自定义操作(首选在不同的线程中,并以某种方式向snmpset命令回复成功): 在不同的机器上运行另一个snmpset,或 宋承宪user@host运行一些命令,或者 运行一些本地工具 以及: 对snmpget命令作出反应 检查yaml文件中请求的oid的值 返回此值 我知道pysnmp,但文档只是让我困惑。我可以想象我需要某种命令响应程序(我需要snmp v2

我需要一种snmp v2c代理(python),它:

  • snmpset命令作出反应
  • 从命令中读取值并将其写入yaml文件
  • 运行自定义操作(首选在不同的线程中,并以某种方式向snmpset命令回复成功):
    • 在不同的机器上运行另一个snmpset,或
    • 宋承宪user@host运行一些命令,或者
    • 运行一些本地工具
以及:

  • snmpget命令作出反应
  • 检查yaml文件中请求的oid的值
  • 返回此值

我知道pysnmp,但文档只是让我困惑。我可以想象我需要某种命令响应程序(我需要snmp v2c)和一些对象来存储yaml文件中的配置/值。但是我完全迷路了。

我认为您应该能够用pysnmp实现所有这些。从技术上讲,这不是SNMP代理,而是SNMP命令响应程序

您可能可以将其作为原型并实现(单个)
cbFun
,它(与原型中的一个类似)接收PDU并在其类型上分支(
GET
SET
SNMP命令)。然后,您可以实现从
GetRequestPDU
分支中的.yaml文件读取的值和.yaml文件写入,以及在
SetRequestPDU
分支中的其他位置发送SNMP SET命令

我们在这里讨论的pysnmpapi是低级的。使用它,您不能要求pysnmp在回调函数之间路由消息——它总是对所有消息类型调用相同的回调

但是,您也可以将工具基于随SNMPv3模型引入的更高级别的SNMP API。使用它,您可以根据支持的PDU类型注册自己的SNMP应用程序(有效地,回调)。但考虑到您只需要SNMPv2c支持,我不确定更高级别的API最终是否会有回报

请记住,SNMP通常是时间敏感的。如果在其他地方运行本地命令或SSH需要几秒钟以上,标准SNMP管理器可能会开始重试并最终超时。如果您看看Net SNMP的
snmpd
是如何工作的,它会运行外部命令并将结果缓存几秒钟。这让原本超时的SNMP管理器最终得到一个稍微过时的响应


P>可选的,你可以考虑编写一个自定义变体插件,它可以很大程度上做到你所描述的。

我看到这个例子,我觉得它最适合我。你说的handler是指cbFun?我应该为Get和Set定义两个cbFun,还是只定义一个(里面有一些if)?如何将它们注册/链接到transportDispatcher?