当前位置: 代码迷 >> 综合 >> PySNMP扩展snmp-trap
  详细解决方案

PySNMP扩展snmp-trap

热度:94   发布时间:2024-01-15 23:44:23.0

pysnmp是用python语言开发的snmp开源项目,感觉没有net-snmp强大。但如果你只开发snmp 客户端的 trap,那么用pysnmp还是很简单的。

 

1、安装

下载pysnmppyasn1源码python setup.py安装,比较简单。

2、pysnmp扩展trap

直接帖代码了:

标准MIB

 

参数MIB

使用的是setVarBinds函数,注意函数的第二个参数,是一个list,每个list元素是一个字典变量。下边是一个很好的例子,开发时照猫画虎就OK了。

私有MIB

上面举的例子都是标准MIB中定义的。要扩展私有MIB会遇到什么问题呢?

问题在这句:pMod.apiTrapPDU.setGenericTrap(trapPDU, 'linkUp')

setGenericTrap的第二个参数是一个标准MIB时,pysnmp是可以识别的,但是如果换成了私有MIB比如RamUsageThresExceed啥的,就会报错:

pyasn1.error.PyAsn1Error: Can't coerce RamUsageThresExceed into integer

这需要修改pysnmp/proto下面的rfc1157.py,在里面定义class TrapPDU的地方

namedtype.NamedType('generic-trap', univ.Integer().cloneXXXXX)的那一行把你要定义的私有MIB加进来。

但是如果你发现pysnmp的版本不一样,找不到那一行,那你就把pysnmppyasn1目录建一个工程,在工程里面搜linkUp(注意大小写),看他们对linkUp做了什么,你就照猫画虎好了~~~

3、注意事项

 

几乎没有什么注意事项,勉强找一个的话那就是对标准的MIB属性,如ifIndex之类的,

在设置它的oid 的时候需要在后面加一个.0。比如:ifIndexOID值是(1,3,6,1,2,1,2,2,1,1),但是在给他赋值的时候,要写成(1,3,6,1,2,1,2,2,1,1,0)