snmp读取oid 软件 snmp oid - 电脑 - 【南平电脑网】_南平电脑维修_南平笔记本电脑维修_监控安装_市区上门维修
公司动态

snmp读取oid 软件 snmp oid

摘要:如何通过snmp读取交换机mib信息,从中取到交换机的路由存储器分类:1:RAM:随机访问存储器,相当于计算机的内存2:ROM:只读存储器,在ROM中驻留了用于启动和维护路由器的一些微代码3:FLAS...

发布日期:2020-09-10

snmp读取oid 软件

如何通过snmp读取交换机mib信息,从中取到交换机的

路由存储器分类:1:RAM:随机访问存储器,相当于计算机的内存2:ROM:只读存储器,在ROM中驻留了用于启动和维护路由器的一些微代码3:FLASH: 闪存,相当于计算机的硬盘,存储了IOS文件映像4:NVRAM: 主要用于存储启动配置文件思科路由器不具备存储历史错误记录的能力,只能通过debug进行即时排错。

思科(Cisco)路由器是一个集成多业务路由器,福利综合服务网络路由器,以及获得回报的网络路由器。

如何通过snmp获取机器资源信息 python

争议python & snmp 用python获取snmp信息有多个现成的库可以使用,其中比较常用的是netsnmp和pysnmp两个库。

网上有较多的关于两个库的例子。

本文重点在于如何并发的获取snmp的数据,即同时获取多台机器的snmp信息。

netsnmp 先说netsnmp。

python的netsnmp,其实是来自于net-snmp包。

python通过一个c文件调用net-snmp的接口获取数据。

因此,在并发获取多台机器的时候,不能够使用协程获取。

因为使用协程,在get数据的时候,协程会一直等待net-snmp接口返回数据,而不会像socket使用时那样在等待数据时把CPU切换给其他协程使用。

从这点上来说,使用协程和串行获取没有区别。

那么如何解决并发获取的问题呢?可以使用线程,多线程获取(当然也可以使用多进程)。

多个线程同时调用net-snmp的接口获取数据,然后cpu在多个线程之间不停切换。

当一个线程获取一个结果后,可以继续调用接口获取下一个snmp数据。

这里我写了一个样例程序。

首先把所有的host和oid做成任务放到队列里,然后启动多个线程,去执行获取任务。

程序样例如下:import threading import time import netsnmp import Queue start_time = time.time() hosts = ["192.20.150.109", "192.20.150.110", "192.20.150.111", "192.20.150.112", "192.20.150.113", "192.20.150.114","192.20.150.115", "192.20.150.116", "192.20.150.117", "192.20.150.118", "192.20.150.119", "192.20.150.120","192.20.150.121", "192.20.80.148", "192.20.80.149", "192.20.96.59", "192.20.82.14", "192.20.82.15","192.20.82.17", "192.20.82.19", "192.20.82.12", "192.20.80.139", "192.20.80.137", "192.20.80.136","192.20.80.134", "192.20.80.133", "192.20.80.131", "192.20.80.130", "192.20.81.141", "192.20.81.140","192.20.82.26", "192.20.82.28", "192.20.82.23", "192.20.82.21", "192.20.80.128", "192.20.80.127","192.20.80.122", "192.20.81.159", "192.20.80.121", "192.20.80.124", "192.20.81.151", "192.20.80.118","192.20.80.119", "192.20.80.113", "192.20.80.112", "192.20.80.116", "192.20.80.115", "192.20.78.62","192.20.81.124", "192.20.81.125", "192.20.81.122", "192.20.81.121", "192.20.82.33", "192.20.82.31","192.20.82.32", "192.20.82.30", "192.20.81.128", "192.20.82.39", "192.20.82.37", "192.20.82.35","192.20.81.130", "192.20.80.200", "192.20.81.136", "192.20.81.137", "192.20.81.131", "192.20.81.133","192.20.81.134", "192.20.82.43", "192.20.82.45", "192.20.82.41", "192.20.79.152", "192.20.79.155","192.20.79.154", "192.25.76.235", "192.25.76.234", "192.25.76.233", "192.25.76.232", "192.25.76.231","192.25.76.228", "192.25.20.96", "192.25.20.95", "192.25.20.94", "192.25.20.93", "192.24.163.14","192.24.163.21", "192.24.163.29", "192.24.163.6", "192.18.136.22", "192.18.136.23", "192.24.193.2","192.24.193.19", "192.24.193.18", "192.24.193.11", "192.20.157.132", "192.20.157.133", "192.24.212.232","192.24.212.231", "192.24.212.230"] oids = [".1.3.6.1.4.1.2021.11.9.0",".1.3.6.1.4.1.2021.11.10.0",".1.3.6.1.4.1.2021.11.11.0",".1.3.6.1.4.1.2021.10.1.3.1",".1.3.6.1.4.1.2021.10.1.3.2",".1.3.6.1.4.1.2021.10.1.3.3",".1.3.6.1.4.1.2021.4.6.0",".1.3.6.1.4.1.2021.4.14.0",".1.3.6.1.4.1.2021.4.15.0"] myq = Queue.Queue() rq = Queue.Queue()#把host和oid组成任务 for host in hosts:for oid in oids:myq.put((host,oid)) def poll_one_host():while True:try:#死循环从队列中获取任务,直到队列任务为空 host, oid = myq.get(block=False) session = netsnmp.Session(Version=2, DestHost=host, Community="cluster",Timeout=3000000,Retries=0) var_list = netsnmp.VarList() var_list.append(netsnmp.Varbind(oid)) ret = session.get(var_list) rq.put((host, oid, ret, (time.time() - start_time))) except Queue.Empty:break thread_arr = []#开启多线程 num_thread = 50 for i in range(num_thread):t = threading.Thread(target=poll_one_host, kwargs={}) t.setDaemon(True) t.start() thread_arr.append(t)#等待任务执行完毕 for i in range(num_thread):thread_arr[i].join() while True:try:info = rq.get(block=False) print info except Queue.Empty:print time.time() - start_time break netsnmp除了支持get操作之外,还支持walk操作,即遍历某个oid。

但是walk使用的时候需要谨慎,以免导致高延时等问题,具体可以参见之前的一篇snmpwalk高延时问题分析的博客。

pysnmp pysnmp是用python实现的一套snmp协议的库。

其自身提供了对于异步的支持。

import time import Queue from pysnmp.hlapi.asyncore import * t = time.time() myq = Queue.Queue()#回调函数。

在有数据返回时...

交换机snmp oid是什么

是的,每个公司需要使用snmp时需要申请各自的oid华为的是.1.3.6.1.4.1.2011cisco的是.1.3.6.1.4.1.9H3C cpu 使用率OID: .1.3.6.1.4.1.25506.2.6.1.1.1.1.6.3 .1.3.6.1.4.1.2011.10.2.6.1.1.1.1.6.13 .1.3.6.1.4.1.2011.10.2.6.1.1.1.1.6.18h3c的似乎有使用华为的oid

如何利用SNMP来获取监控数据

基本知识准备: 1、SNMP(简单网络管理协议) 2、一些脚本知识,可以编写任意一种脚本。

3、知道Nagios怎么用。

好啦,现在开始: 1、编写一个可以输出本机Nginx并发连接数的脚本,输出结果为连接数。

我这里脚本比较简单,只是看看已经链接80端口的。

当然也可以自己编写更精确的脚本。

[root@webserver2 scripts]# cat showhttp.sh #!/bin/bash echo `netstat -nat | grep -i "80" | wc -l` 2、配置snmp,如何安装我就不说的,自己去弄呗。

yum install net-snmp* 我是这么安装的。

看下我的snmp配置文件: [root@webserver2 ~]# grep -v "^#" /etc/snmp/snmpd.conf | grep -v "^$" com2sec notConfigUser default public group notConfigGroup v1 notConfigUser group notConfigGroup v2c notConfigUser view systemview included .1.3.6.1.2.1.1 view systemview included .1.3.6.1.2.1.25.1.1 view systemview included .1.3.6.1.4.1.2021 access notConfigGroup "" any noauth exact systemview none none syslocation Unknown (edit /etc/snmp/snmpd.conf) syscontact Root (configure /etc/snmp/snmp.local.conf) pass .1.3.6.1.4.1.4413.4.1 /usr/bin/ucd5820stat exec .1.3.6.1.4.1.2021.51 showhttp /bin/bash /root/scripts/showhttp.sh 然后重载下snmp的配置文件。

/etc/init.d/snmpd reload 使用snmpwalk测试下,能不能通过snmp来获取数据。

[root@webserver2 ~]# snmpwalk -v 1 -c public 192.168.137.102 .1.3.6.1.4.1.2021.51 UCD-SNMP-MIB::ucdavis.51.1.1 = INTEGER: 1 UCD-SNMP-MIB::ucdavis.51.2.1 = STRING: "showhttp" UCD-SNMP-MIB::ucdavis.51.3.1 = STRING: "/bin/bash /root/scripts/showhttp.sh" UCD-SNMP-MIB::ucdavis.51.100.1 = INTEGER: 0 UCD-SNMP-MIB::ucdavis.51.101.1 = STRING: "7" UCD-SNMP-MIB::ucdavis.51.102.1 = INTEGER: 0 UCD-SNMP-MIB::ucdavis.51.103.1 = "" [root@webserver2 ~]# snmpwalk -v 1 -c public 192.168.137.102 showhttp showhttp: Unknown Object Identifier (Sub-id not found: (top) -> showhttp) [root@webserver2 ~]# snmpwalk -v 1 -c public 192.168.137.102 .1.3.6.1.4.1.2021.51.101.1 UCD-SNMP-MIB::ucdavis.51.101.1 = STRING: "5" 至此位置,snmp就配置好了。

至于原理,google、baidu一大堆。

限于自己的表述能力和打字速度就不在此复述了。

下面我登录nagios的监控机,来监控这台机器的http连接数量。

2、首先安装nagios,这里跳过。

3、先写个如下脚本,获取被监控的设备的snmp值。

[root@webserver2 libexec]# cat show_http #!/bin/bash OID=".1.3.6.1.4.1.2021.51.101.1" IPADDRESS=$2 COMMUNITY=$1 if [[ -z $IPADDRESS ]] || [[ -z $COMMUNITY ]]; then echo "Mabe ... ...Usage: show_http " exit 4 fi counts=`snmpwalk -v 1 -c $COMMUNITY $IPADDRESS $OID 2>/dev/null | awk -F""" "{print $2}"` if [ -z $counts ]; then echo "Mabe snmpd is down OR ipaddress error OR community fault." exit 4 fi if [ $counts -ge 200 ]; then echo "Cirtical - connection - $counts" exit 2 elif [ $counts -ge 100 ]; then echo "Warning - connection - $counts" exit 1 else echo "OK - connection - $counts" exit 0 fi 3、最nagios进行一些配置: define command{ command_name check-host-alive command_line $USER1$/show_http nagios $HOSTADDRESS$ #添加一条命令,参数是团体名和主机地址,团体名,我直接用了nagios。

为了可扩展性的考虑,大家也可以使用resources文件来定义。

这里不再复述。

} define host{ #添加一台主机 use web-server host_name nginx-server alias nginx-server address 192.168.137.101 } define service{ #添加一项监控服务 use web-service host_name nginx-server service_description showhttp check_command check_httplink } 联系人什么的,我就不配置了,用配置文件来修改真心疲惫。

这里顺便推荐两款软件Centreon、NagiosQL很不错的哦~

用mib browser通过snmp获取设备数据,为什么用java获取不了

Standard MIB就可以读取.17.1.1对于端口的MAC,可以用Name: ifPhysAddressType.6: 1.3.6.1.2.1.2.2.1.6例如读取10 port的MAC.1可以.3。

交换机的bridge MAC用下边的节点Name: dot1dBaseBridgeAddressType: OBJECT-TYPEOID: 1.2: OBJECT-TYPEOID,去get 1.3.6.1.2.1.2.2.1.6.10就可.1...