python-netsnmp扩展(2)管理端简单功能开发
2016-08-18 11:02
357 查看
上篇文章讲到配置完成并能够实现get,类似的可以实现set,后来研究了一段时间简单的trap功能也基本完成.
先解决一个上篇未完美解决的问题:
2、libnetsnmp.so.30找不到,ln -s /usr/local/lib/libnetsnmp.so.30 /usr/lib创建一个连接一般可以解决,
但我并不能于是export LD_LIBRARY_PATH=/usr/local/lib每次terminal都要输入一次但确实可行,更好的办法正在寻找中。。
后来将ln -s /usr/local/lib/libnetsnmp.so.30 /usr/lib 改为ln -s /usr/local/lib/libnetsnmp.so.30 /usr/lib64 后执行,创建链接到lib64中就可以了..笋尖感觉自己SB了.
好了回到管理端的开发,新建一个文件开始写入我们的python程序
先定义一个类,作为要管理的对象
class XXX(object):
def __init__(self, destHost):
self.destHost = destHost
self.snmpSession =netsnmp.Session('参数自己设置')
并设置一个类的方法get
def SnmpGet(self,oid_desc):
oid = netsnmp.Varbind(oid_desc,'0') #将地址等信息bind,这里图简单我省去了value什么的东西
oidList = netsnmp.VarList(oid) # 将bind后的信息放入list,这里我只放入了一组信息oid
resultList = self.snmpSession.get(oidList) #get 返回一个resultlist,因为我的oidList里只有一个,所以resultList里也只有一组数据
return resultList
set的方法与get类似,只是在bind的时候要多一个value参数(加载mib文件后可以省略valueType)
上面两个功能相对简单,trap稍微麻烦一点.
界面比较简陋,主要是作为测试使用.
因为python netsnmp模块没有对snmptrapd的扩展(README中没有介绍,网上也没有找到,我就默认为没有了),所以我实际上还是在命令行中实现trapd这个功能.
4000
思路是点击'open'按钮,就打开snmptrapd服务,此时处于监听状态,可以捕获代理端发来的snmptrap信息,然后提示管理者,并将信息写入checkfile。
点击'close' 则 stop snmptrapd,并退出程序。
为trapd功能 建立一个进程
t=Process(target=trapd,)
点击open触发事件
def openTrapd():
t.start()
var5.set('OpenNow !')
trapd函数如下
def trapd():
global path
trapd_it_adr=path+'/trapd_it'
os.system(trapd_it_adr)
其中trapd_it是一个shell脚本,相当于在命令行执行snmptrapd,要使用sudo。
可能遇到的问题:sudo找不到命令snmptrap(d),原因是snmptrap(d)不在sudoers这个文件配置的路径下面,具体可以上网查一下。网上比较多的建议是修
改sudoers文件,我建议将给snmptrap(d)命令创建一个链接 sudo ln -s \usr\local\bin\snmptrap(d) \bin 前面一个位置是你的snmptrap(d)所放的位置,后面一个是
sudoers的默认搜索路径,不只\bin这一个,具体可以打开sudoers看一下,不过需要权限,而我在改变sudoers的权限后,这个文件就失效了。。。
其中path是shell文件以及后面要用到的奇奇怪怪的文件的存放路径。
点击close触发事件
def closeTrapd():
trapd_cls()
var5.set('ClosedNow !')
root.quit()
def trapd_cls():
global path
f=open(path+'/snmpd_pid','r')
pid=f.read()
os.system('sudo kill 2 %i'%long(pid))
f.close()
t.terminate()
关闭snmptrapd的方法有点蠢,但确实也没找到更好的办法,snmpd_pid是存放snmptrapd服务pid的文件,在shell里的命令中加入-p可以获得pid.在snmptrapd.conf中我配置的触发程序是log_it(shell),他的作用是将信息写入checkfile,并执行alarm_it(python)作用是提醒管理者。
代码写得很乱,对于实现的这个小功能来讲文件也显得有些多,不过能运行就好。
sudo snmptrap -v 2c -c public localhost:162 "" XXX-MIB::XXXwarning,成功收到 提示,并记录到checkfile
管理端 的开发基本就这个过程。代理端那边因为直接用的购买的设备所以大概也不需要自己去用C写扩展了。实现过程中也是遇到数不清的问题。。而且感觉这方面的资料非常的零乱,所以一天大部分时间都游击在各大国内外论坛,也算学习到很多。
相关文章推荐
- 用NET-SNMP软件包开发简单客户端代理
- 用NET-SNMP软件包开发简单客户端代理
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能
- net-snmp agent开发详解,非常简单
- 简单快速开发C\S架构程序用最简单的不分层最快的效率达到功能要求的例子程序FrmCommnets
- .NET开发实现类似Web Parts功能,超简单实现
- 简单网络协议SNMP之net-snmp开发snmpget
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能
- 简单快速开发C\S架构程序用最简单的不分层最快的效率达到功能要求的例子程序FrmCommnetList 所有评论列表的功能实现
- 用NET-SNMP软件包开发简单客户端代理
- 用NET-SNMP软件包开发简单客户端代理
- (转)用NET-SNMP软件包开发简单客户端代理
- 用NET-SNMP软件包开发简单客户端代理
- 用NET-SNMP软件包开发简单客户端代理
- 用NET-SNMP软件包开发简单客户端代理
- (转)用NET-SNMP软件包开发简单客户端代理
- (转)用NET-SNMP软件包开发简单客户端代理
- 用NET-SNMP软件包开发简单客户端代理(上)
- 简单快速开发C\S架构程序用最简单的不分层最快的效率达到功能要求的例子程序FrmCommnetList
- net-snmp agent开发详解,非常简单