python-netsnmp扩展(2)管理端简单功能开发
来源:互联网 发布:博客源码 编辑:程序博客网 时间:2024/06/05 18:16
上篇文章讲到配置完成并能够实现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这个功能.
思路是点击'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写扩展了。实现过程中也是遇到数不清的问题。。而且感觉这方面的资料非常的零乱,所以一天大部分时间都游击在各大国内外论坛,也算学习到很多。
- python-netsnmp扩展(2)管理端简单功能开发
- 在Win7_CentOS虚拟机上实现python-netsnmp扩展
- python 实现libvirt管理(简单的几个功能)
- python 实现libvirt管理(简单的几个功能)
- net-snmp启用python模块(python-netsnmp安装)
- PHP7扩展简单开发
- snmp开发记录2--使用python扩展
- python扩展模块开发
- 关于python netsnmp模块 snmpwalk工具 timeout参数说明
- snmp学习笔记之三--开发netsnmp Agent
- snmp学习笔记之三--开发netsnmp Agent
- snmp学习笔记之三--开发netsnmp Agent
- GeoServer后台管理web功能扩展
- 2---python开发简单爬虫
- chrome扩展开发简单示例
- python的markdown扩展开发
- burpsuite扩展开发之Python
- [python] Linux 电源管理功能
- UITableView
- $ajax发送请求数据库数据不动
- Spring Boot 拦截器
- 二,Shiro概述(2)
- 编译编码问题
- python-netsnmp扩展(2)管理端简单功能开发
- svn: E175002: REPORT of '/xxxx-demo/!svn/vcc/default': Could not read response body: Secure connecti
- 我的WCF数据服务(二)独立
- mysql my.ini 配置
- HTML5 绘制简单圆形 loading. . . .
- Linux在有ipv6接入环境下优先使用ipv4
- Android application详解与用法
- UITextFeild
- 搭建开源论坛之JForum安装+简易二次修改