浅谈SNMP(简单网络管理协议)采集设备配置信息

太过爱你忘了你带给我的痛 2021-09-26 05:00 1116阅读 0赞
  1. 前段时间有幸接触到关于硬件交换机、存储器这块硬件方面的知识,然后去网上了解了一下怎么去获取设备的配置信息方面的知识
  2. 下面我就来简单谈谈自己的观点,还望大神多多指教,相互学习:
  3. 众所周知,机房内的各个设备都是需要通过IP网络来通信的,而SNMP是基于TCP/IP协议族的网络管理标准,是一种在IP网络中管理网络节点(如服务器、工作站、路由器、交换机等)的标准协议。SNMP能够使网络管理员提高网络管理效能,及时发现并解决网络问题以及规划网络的增长。网络管理员还可以通过SNMP接收网络节点的通知消息以及告警事件报告等来获知网络出现的问题。
  4. 那么今天我这里要讲的就是关于怎样通过SNMP协议来获取配置信息,下面先来介绍SNMP协议的一些知识:

SNMP管理的网络主要由三部分组成

被管理的设备

SNMP代理

网络管理系统(NMS)

它们之间的关系如下:

  1. 网络中被管理的每一个设备都存在一个管理信息库(MIB)用于收集并存储管理信息。 通过SNMP协议,NMS能获取这些信息。
  2. 被管理设备,又称为网络单元或网络节点,可以支持SNMP协议的有路由器、交换机、服务器或者主机等等。
  3. SNMP代理是被管理设备上的一个网络管理软件模板,拥有本地设备的相关管理信息,并用于将它们转换成与SNMP兼容的格式,传递给NMS
  4. NMS运行应用程序来实现监控被管理设备的功能。另外,NMS还为网络管理提供大量的处理程序及必须的储存资源。
  5. 介绍下上文中的**管理信息库(MIB)**,它由网络管理协议访问的管理对象数据库,它包括SNMP可以通过网络设备的SNMP管理代理进行设置的变量。MIB是对象的集合,它代表网络中可以管理的资源和设备。每个对象基本上是一个数据变量,它代表被管理的对象的一方面的信息。
  6. 使用SNMP进行网络管理需要下面几个重要部分:**管理基站**,**管理代理**,**管理信息库**和**网络管理工具**。
  7. 管理基站通常是一个独立的设备,它用作网络管理者进行网络管理的用户接口。基站上必须装备有管理软件,管理员可以使用的用户接口和从MIB取得信息的数据库,同时为了进行网络管理它应该具备将管理命令发出基站的能力。
  8. 管理代理是一种网络设备,如主机,网桥,路由器和集线器等,这些设备都必须能够接收管理基站发来的信息,它们的状态也必须可以由管理基站监视。管理代理响应基站的请求进行相应的操作,也可以在没有请求的情况下向基站发送信息。
  9. 最后一个方面是管理协议,也就是**SNMP**,SNMP的基本功能是:取得,设置和接收代理发送的意外信息。取得指的是基站发送请求,代理根据这个请求回送相应的数据,设置是基站设置管理对象(也就是代理)的值,接收代理发送的意外信息是指代理可以在基站未请求的状态下向基站报告发生的意外情况。
  10. 而在我们去进行SNMP协议管理的时候会用到几个参数:
  11. **IP地址**

通信字符串

OID

  1. **IP地址**:即设备的物理IP地址
  2. 最常见的默认**通信字符串**是public(只读)和private(读/写),除此之外还有许多厂商私有的默认通信字符串。几乎所有运行SNMP的网络设备上,都可以找到某种形式的默认通信字符串。
  3. **OID**:是指设备MIB库内对应信息会有一个OID编号,这个需要去设备厂商处查询得到。

在此我们还使用了iReasoning MIB Browser这个MIB浏览软件以配合我们的工作,将设备厂商提供的MIB包导入浏览器,就能看见设备的一些OID相关的信息。

  1. 而在我工作中呢,SNMP监控的性能指标很多都是通过snmpwalk采集设备的OID信息得到的。
  2. **snmpwalk**是SNMP的一个工具,它使用SNMP的**GETNEXT**请求查询指定**OIDSNMP协议中的对象标识)**入口的所有OID树信息,并显示给用户。通过snmpwalk也可以查看支持**SNMP协议(可网管)**的设备的一些其他信息,比如**cisco交换机**或路由器IP地址、内存使用率等,也可用来协助开发SNMP功能。

下面是用到的一部分代码,通过snmpwalk采集设备的OID信息:

  1. public static Map<String, String>snmpWalk(String ip, String community, String targetOid) {
  2. CommunityTarget target = createDefault(ip, community);
  3. TransportMapping transport = null;
  4. Snmp snmp = null;
  5. Map<String, String> map = new HashMap<String, String>();
  6. try {
  7. transport = new DefaultUdpTransportMapping();
  8. snmp = new Snmp(transport);
  9. transport.listen();
  10. PDU pdu = new PDU();
  11. OID targetOID = new OID(targetOid);
  12. pdu.add(new VariableBinding(targetOID));
  13. boolean finished =false;
  14. while (!finished) {
  15. VariableBinding vb = null;
  16. ResponseEvent respEvent = snmp.getNext(pdu, target);
  17. PDU response = respEvent.getResponse();
  18. if (null == response) {
  19. finished = true;
  20. break;
  21. } else {
  22. vb = response.get(0);
  23. }
  24. finished = checkWalkFinished(targetOID, pdu, vb);
  25. if (!finished) {
  26. String key = vb.getOid().toString();
  27. map.put(key.split("\\.")[key.split("\\.").length - 1], vb.getVariable().toString());
  28. pdu.setRequestID(new Integer32(0));
  29. pdu.set(0, vb);
  30. } else {
  31. snmp.close();
  32. }
  33. }
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. } finally {
  37. if (snmp !=null) {
  38. try {
  39. snmp.close();
  40. } catch (IOException ex1) {
  41. snmp = null;
  42. }
  43. }
  44. }
  45. return map;
  46. }

代码参考了以下这位大神的代码:

http://blog.csdn.net/fw0124/article/details/8559803

发表评论

表情:
评论列表 (有 0 条评论,1116人围观)

还没有评论,来说两句吧...

相关阅读

    相关 使用snmp采集网络拓扑信息

    SNMP(简单网络管理协议)是一种网络管理协议,可以用来采集网络拓扑信息。 通过使用SNMP代理程序,可以从网络设备中收集信息,并通过SNMP管理工具来监控和管理网络设备。

    相关 SNMP简单网络管理协议

     基于 TCP/IP 的网络管理包括两部分:网络管理站 (manager) 和被管理的网络单元(被管设备)。这些被管设备的共同点就是都运行 TCP/IP 协议。管理进程和

    相关 网络管理SNMP协议

    SNMP(simple network management protocol ,简单网络管理协议)是网络管理程序(NMS)和代理程序(Agent)之间的通信协议。它规定了在网