python实现数通设备端口监控示例


Posted in Python onApril 02, 2014

最近因工作需要,上面要求,每天需上报运维的几百数通设备端口使用情况【】,虽然有现成网管监控工具监控设备状态,但做报表,有点不方便,特写了个小脚本。

注:测试运行于ubuntn,需安装snmpwalk工具,

目标数通设备,需做好相关snmp配置

#/usr/bin/python
#coding:utf-8
import os,sys
import re
from pprint import pprint
#甯歌???瀹舵?伴??璁惧?MIB??
MIB = {
   'public':{
        'ports':{
           'string':'.1.3.6.1.2.1.2.2.1.2',
           'status':'.1.3.6.1.2.1.2.2.1.8',   #2 down
       }
    },
   'huawei':{
   },
   'cisco':{
   }
}
#绔??g?舵??杞???
def portStatus(_s):
    if int(_s)==2:
        return 'down'
    elif int(_s)==1:
        return 'up'
    else:
        return 'none'
#?ц?绯荤??戒护snmpwalk璋???BR>def snmpwalk(host,publicKey,iso):
    return [i.strip() for i in os.popen('/usr/bin/snmpwalk -c %s  -v 2c %s %s'%(publicKey,host,iso)).readlines()]
def getPorts(_ip,_public,option):
    if option == 'ports':
        postsString = (j.split('=')[1].split(':')[1].replace('"','').strip() for j in snmpwalk(_ip,_public,MIB['public']['ports']['string']))
        postsStatus = (int(j.split('=')[1].split(':')[1].strip()) for j in snmpwalk(_ip,_public,MIB['public']['ports']['status']))
        return zip(postsString,postsStatus)
    else:
        print('on this commmnad')
publicKey = 'hi'  #sunmp public key
HOSTS={
    '10.221.98.2':{'type':'switch','origin':'quidway','public':publicKey},
    '10.221.98.3':{'type':'switch','origin':'quidway','public':publicKey},
    '10.221.97.108':{'type':'firewall','origin':'h3c','public':publicKey},
    '10.231.98.233':{'type':'switch','origin':'cisco','public':publicKey},
}
if __name__ == '__main__':
    for i in HOSTS.keys():
        for host,status in getPorts(i,HOSTS[i]['public'],'ports'):
            print("%s\t%s\t%s"%(i,host.ljust(30),portStatus(status).ljust(20)))
        print(''.ljust(50,'#'))

运行结果

root@ubuntn12:/tmp# python snmpwalk.py 
10.221.98.2     InLoopBack0                     up                  
10.221.98.2     NULL0                           up                  
10.221.98.2     GigabitEthernet0/0/0            down                
10.221.98.2     Aux0/0/1                        down                
10.221.98.2     Vlanif100                       up                  
10.221.98.2     Eth-Trunk1                      down                
10.221.98.2     Eth-Trunk1.32                   down                
10.221.98.2     Eth-Trunk1.50                   down                
10.221.98.2     Eth-Trunk1.60                   down                
10.221.98.2     Eth-Trunk1.70                   down                
10.221.98.2     Eth-Trunk1.80                   down                
10.221.98.2     Eth-Trunk1.100                  down                
10.221.98.2     Eth-Trunk1.110                  down    
Python 相关文章推荐
python控制台显示时钟的示例
Feb 24 Python
python中使用OpenCV进行人脸检测的例子
Apr 18 Python
python实现绘制树枝简单示例
Jul 24 Python
Python中编写ORM框架的入门指引
Apr 29 Python
python实现井字棋游戏
Mar 30 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
Jun 07 Python
Python range与enumerate函数区别解析
Feb 28 Python
解决ROC曲线画出来只有一个点的问题
Feb 28 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
Pytorch 使用 nii数据做输入数据的操作
May 26 Python
Pytest中skip skipif跳过用例详解
Jun 30 Python
Python requests用法和django后台处理详解
Mar 19 Python
使用python解析xml成对应的html示例分享
Apr 02 #Python
Python爬虫框架Scrapy安装使用步骤
Apr 01 #Python
使用python绘制人人网好友关系图示例
Apr 01 #Python
python异步任务队列示例
Apr 01 #Python
用Python编程实现语音控制电脑
Apr 01 #Python
35个Python编程小技巧
Apr 01 #Python
ptyhon实现sitemap生成示例
Mar 30 #Python
You might like
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
php win下Socket方式发邮件类
2009/08/21 PHP
php中取得文件的后缀名?
2012/02/20 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
PDO::query讲解
2019/01/29 PHP
laravel入门知识点整理
2020/09/15 PHP
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
js中获取事件对象的方法小结
2011/03/13 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
原生js滑动轮播封装
2020/07/31 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
Python break语句详解
2014/03/11 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
给Python学习者的文件读写指南(含基础与进阶)
2020/01/29 Python
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
法学院毕业生求职信
2014/06/25 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
人事局接收函
2015/01/30 职场文书
大学生自我评价范文
2015/03/03 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
完美解决golang go get私有仓库的问题
2021/05/05 Golang