Mib浏览器设计(附源码)

    Mib是snmp采集器的基础。Mib是网络oid的描述载体,主要把设备oid的值、描述和参数放入mib。是用来做主动轮询和被动收集收集trap信息翻译的主要基础数据。但是mib是一直特别的协议,通过特别的树形结构存放数据。

    建立一套良好的mib控制代码,整个网管系统的基础。如果用一个灵活可以扩展的mib库才是一个网管系统可持续发展的生命力。

   mibble-parser-2.9.2.jar是一套开源的mibble解析器,本程序代码就是给予mibble-parser-2.9.2.jar构建的。并且要感谢fengjiangzhongf@gmail.com对该模块的部分代码编写。

   核心解析类

   

package com.shine.framework.MibBrowser;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import net.percederberg.mibble.Mib;
import net.percederberg.mibble.MibLoader;
import net.percederberg.mibble.MibLoaderException;
import net.percederberg.mibble.MibSymbol;
import net.percederberg.mibble.MibValue;
import net.percederberg.mibble.MibValueSymbol;
import net.percederberg.mibble.value.ObjectIdentifierValue;

import com.shine.framework.MibBrowser.model.MibModel;

/**
 * mib 文件分析类库
 * 
 * @author fjz 2011.10.08
 * 
 */
public class MibBrowserUtils {
	/**
	 * 获取所有mib
	 * @param mibfilePath
	 * @return
	 */
	public static List<MibModel> getAllOid(String mibfilePath) {
		File file=checkFile(mibfilePath);
		if(file==null)
			return null;
		MibModel map ;
		Mib mib;
		List<MibModel> list=new ArrayList<MibModel>();
		try {
			mib = loadMib(file);
		    Iterator   iter = mib.getAllSymbols().iterator();
		    MibSymbol  symbol;
		    MibValue   value;
		    while (iter.hasNext()) {
		        symbol = (MibSymbol) iter.next();
		        value = extractOid(symbol);
		        if (value != null) {
		        	map=new MibModel();
		        	map.setName(symbol.getName());
		        	map.setOid(value.toString());
		        	map.setDetail(symbol.toString());
		        	list.add(map);
		        }
		    }
		} catch (MibLoaderException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return list;
	}
	
	/**
	 * 检查该oid是否属于mib
	 * 
	 * @param mibfilePath
	 * @param oid
	 * @return
	 */
	public static boolean checkOid(String mibfilePath, String oid) {
		List<MibModel> list=getAllOid(mibfilePath);
		return checkOid(list,oid);
	}
	/**
	 * 检查该oid是否属于mib
	 * @param list
	 * @param oid
	 * @return
	 */
	public static boolean checkOid(List<MibModel> list, String oid){
		if(list==null)
			return false;
		for (MibModel mibModel : list) {
			if(mibModel.getOid().equals(oid))
				return true;
		}
		return false;
	}
	/**
	 * 获取oid信息
	 * 
	 * @param mibfilePath
	 * @param oid
	 * @return
	 */
	public static MibModel getOidInfo(String mibfilePath, String oid) {
		List<MibModel> list=getAllOid(mibfilePath);
		return getOidInfo(list,oid);
	}
	/**
	 * 获取oid信息
	 * 
	 * @param mibfilePath
	 * @param oid
	 * @return
	 */
	public static MibModel getOidInfo(List<MibModel> list, String oid) {
		//System.out.println(list.size());
		if(list==null)
			return null;
		for (MibModel mibModel : list) {
			if(mibModel.getOid().equals(oid))
				return mibModel;
		}
		return null;
	}
	/**
	 * 根据文件提取出mib
	 * @param file地址
	 * @return
	 * @throws MibLoaderException
	 * @throws IOException
	 */
	public static Mib loadMib(File file) throws MibLoaderException, IOException {
	    MibLoader  loader = new MibLoader();
	    loader.addDir(file.getParentFile());
	    return loader.load(file);
	}
	/**
	 * 提取oid出来
	 * @param symbol
	 * @return
	 */
	public static ObjectIdentifierValue extractOid(MibSymbol symbol) {
	    MibValue  value;
	    if (symbol instanceof MibValueSymbol) {
	        value = ((MibValueSymbol) symbol).getValue();
	        if (value instanceof ObjectIdentifierValue) {
	            return (ObjectIdentifierValue) value;
	        }
	    }
	    return null;
	}
	/**
	 * 检测文件是否文件,存不存在
	 * @param mibfilePath
	 * @return
	 */
	public static File checkFile(String mibfilePath){
		File file=new File(mibfilePath);
		if(!file.exists())
			return null;
		if(!file.isFile())
			return null;
		return file;
	}
}

  获取所有Mib信息

package com.shine.framework.MibBrowser;

import java.util.List;

import com.shine.framework.MibBrowser.model.MibModel;

public class AllMibLogsExample {

	/**
	 * 获取指定文档的所有oid信息
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		List<MibModel> list = MibBrowserUtils
				.getAllOid("E:/workspace/nms4.6/WebContent/WEB-INF/config/mib/CISCO-PRODUCTS-MIB.mib");

		for (MibModel model : list) {
			System.out.println("name:" + model.getName());
			System.err.println("detail:" + model.getDetail());
		}

	}

}

     获取指定oid的信息

package com.shine.framework.MibBrowser;

import com.shine.framework.MibBrowser.model.MibModel;

public class GetTargetOidInfoExample {

	/**
	 * 获取指定oid的信息
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		MibModel model = MibBrowserUtils
				.getOidInfo(
						"E:/workspace/nms4.6/WebContent/WEB-INF/config/mib/CISCO-PRODUCTS-MIB.mib",
						"1.3.6.1.4.1.9.1.67");
		System.out.println(model.getName());
	}

}

    在具体使用中,我们把mib当成一个具体的数据存储器而不是原来的树形结构。就是列表性的结构。



评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值