打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
利用SNMP获取、走访节点值
  • 本例用到两个开源包,snmpget使用SNMP4J框架,snmpwalk使用Java SNMP Package开源包,下载地址分别为:

    http://www.snmp4j.org/html/download.html

    http://gicl.cs.drexel.edu/people/sevy/snmp/

  • /**  
  •  * SNMP管理类  
  •  */  
  • public class SnmpManager {   
  •   
  •     private static final Log log = LogFactory.getLog(SnmpManager.class);   
  •        
  •     private static int version = 0// SNMP版本, 0表示版本1   
  •        
  •     private static String protocol = "udp"// 监控时使用的协议   
  •        
  •     private static String port = "161"// 监控时使用的端口   
  •            
  •     /**  
  •      * 获取SNMP节点值  
  •      *   
  •      * @param ipAddress 目标IP地址  
  •      * @param community 公同体  
  •      * @param oid 对象ID  
  •      * @return String 监控结果代号  
  •      * @throws AppException  
  •      */  
  •     @SuppressWarnings("unchecked")   
  •     public static String snmpGet(String ipAddress, String community, String oid) throws AppException {   
  •         String resultStat = null// 监控结果状态   
  •            
  •         StringBuffer address = new StringBuffer();   
  •         address.append(protocol);   
  •         address.append(":");   
  •         address.append(ipAddress);   
  •         address.append("/");   
  •         address.append(port);   
  •            
  • //      Address targetAddress = GenericAddress.parse(protocol + ":" + ipAddress + "/" + port);   
  •         Address targetAddress = GenericAddress.parse(address.toString());   
  •         PDU pdu = new PDU();   
  •         pdu.add(new VariableBinding(new OID(oid)));   
  •         pdu.setType(PDU.GET);   
  •   
  •         // 创建共同体对象CommunityTarget   
  •         CommunityTarget target = new CommunityTarget();   
  •         target.setCommunity(new OctetString(community));   
  •         target.setAddress(targetAddress);   
  •         target.setVersion(SnmpConstants.version1);   
  •         target.setTimeout(2000);   
  •         target.setRetries(1);   
  •   
  •         DefaultUdpTransportMapping udpTransportMap = null;   
  •         Snmp snmp = null;   
  •         try {   
  •             // 发送同步消息   
  •             udpTransportMap = new DefaultUdpTransportMapping();   
  •             udpTransportMap.listen();   
  •             snmp = new Snmp(udpTransportMap);   
  •             ResponseEvent response = snmp.send(pdu, target);   
  •             PDU resposePdu = response.getResponse();   
  •   
  •             if (resposePdu == null) {   
  •                 log.info(ipAddress + ": Request timed out.");   
  •             } else {   
  •                 //errorStatus = resposePdu.getErrorStatus();   
  •                 Object obj = resposePdu.getVariableBindings().firstElement();   
  •                 VariableBinding variable = (VariableBinding) obj;   
  •                 resultStat = variable.getVariable().toString();   
  •             }   
  •         } catch (Exception e) {   
  •             throw new AppException("获取SNMP节点状态时发生错误!", e);   
  •         } finally {   
  •             if (snmp != null) {   
  •                 try {   
  •                     snmp.close();   
  •                 } catch (IOException e) {   
  •                     snmp = null;   
  •                 }   
  •             }   
  •             if (udpTransportMap != null) {   
  •                 try {   
  •                     udpTransportMap.close();   
  •                 } catch (IOException e) {   
  •                     udpTransportMap = null;   
  •                 }   
  •             }   
  •         }   
  •            
  •         if (log.isInfoEnabled()) {   
  •             log.info("IP:" + ipAddress + " resultStat:" + resultStat);   
  •         }   
  •            
  •         return resultStat;   
  •     }   
  •        
  •        
  •     /**  
  •      * 走访SNMP节点  
  •      *   
  •      * @param ipAddress 目标IP地址  
  •      * @param community 共同体  
  •      * @param oid 节点起始对象标志符  
  •      * @return String[] 走方结果  
  •      * @throws AppException  
  •      */  
  •     public static String[] snmpWalk(String ipAddress, String community, String oid) throws AppException {   
  •         String[] returnValueString = null// oid走访结果数组   
  •            
  •         SNMPv1CommunicationInterface comInterface = null;   
  •         try {   
  •             InetAddress hostAddress = InetAddress.getByName(ipAddress);   
  •             comInterface = new SNMPv1CommunicationInterface(   
  •                     version, hostAddress, community);   
  •             comInterface.setSocketTimeout(2000);   
  •                
  •             // 返回所有以oid开始的管理信息库变量值   
  •             SNMPVarBindList tableVars = comInterface.retrieveMIBTable(oid);   
  •             returnValueString = new String[tableVars.size()];   
  •                
  •             // 循环处理所有以oid开始的节点的返回值   
  •             for (int i = 0; i < tableVars.size(); i++) {   
  •                 SNMPSequence pair = (SNMPSequence) tableVars.getSNMPObjectAt(i); // 获取SNMP序列对象, 即(OID,value)对   
  •                 SNMPObject snmpValue = pair.getSNMPObjectAt(1); // 获取某个节点的返回值   
  •                 String typeString = snmpValue.getClass().getName(); // 获取SNMP值类型名   
  •                 // 设置返回值   
  •                 if (typeString.equals("snmp.SNMPOctetString")) {   
  •                     String snmpString = snmpValue.toString();   
  •                     int nullLocation = snmpString.indexOf('\0');   
  •                     if (nullLocation >= 0)   
  •                         snmpString = snmpString.substring(0, nullLocation);   
  •                     returnValueString[i] = snmpString;   
  •                 } else {   
  •                     returnValueString[i] = snmpValue.toString();   
  •                 }   
  •             }   
  •         } catch (SocketTimeoutException ste) {   
  •             if (log.isErrorEnabled()) {   
  •                 log.error("走访IP为" + ipAddress + ", OID为" + oid + " 时超时!");   
  •             }   
  •             returnValueString = null;   
  •         } catch (Exception e) {   
  •             throw new AppException("SNMP走访节点时发生错误!", e);   
  •         } finally {   
  •             if (comInterface != null) {   
  •                 try {   
  •                     comInterface.closeConnection();   
  •                 } catch (SocketException e) {   
  •                     comInterface = null;   
  •                 }   
  •             }   
  •         }   
  •            
  •         return returnValueString;   
  •     }   
  • }  
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
snmp是什么意思 网管中的专门协议(简单网络管理协议)
使用Cacti监控你的网络(三)- Cacti的使用
SNMP介绍
校园路由器故障维护的常见方法
实战:无线网络应用配置六步走
netsnmp配置
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服