关于使用JAVA进行MIB文件解析
最近工作上有功能需求解析MIB文件,在网上找了一圈之后发现都是不全的,很多论坛的提问及回答都是很多年前的,最后经过摸索找到了完整的解析方法,因此做个记录,也希望给其他需要的人一个帮助。
以下是我的java代码及一些小细节:
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;import com.xxx.bean.MmMib;import net.percederberg.mibble.Mib;
import net.percederberg.mibble.MibLoader;
import net.percederberg.mibble.MibLoaderException;
import net.percederberg.mibble.MibValue;
import net.percederberg.mibble.MibValueSymbol;
import net.percederberg.mibble.snmp.SnmpObjectType;public class MibFileParse {@SuppressWarnings( { "rawtypes" }) public List<MmMib> getMib(String filePath) throws IOException, MibLoaderException { File file = new File(filePath); MibLoader ml = new MibLoader(); Mib mib = ml.load(file); String mibName = mib.getName(); System.err.println("mibName===" + mibName); System.err.println("-------------------------------------"); String syntax = ""; String access = ""; String status = ""; List<MmMib> list = new ArrayList<MmMib>(); Collection c = mib.getAllSymbols(); Iterator it = c.iterator(); while (it.hasNext()) { Object obj = it.next(); if (obj instanceof MibValueSymbol) { MmMib mo = new MmMib(); MibValueSymbol mvs = (MibValueSymbol) obj; SnmpObjectType sot = null; if (mvs.getType() instanceof SnmpObjectType) { sot = (SnmpObjectType) mvs.getType(); } if (sot != null ) { syntax = sot.getSyntax().getName(); access = sot.getAccess().toString(); status = sot.getStatus().toString(); } //是否为表的列 boolean isTableColumn = mvs.isTableColumn(); String name = mvs.getName(); MibValue value = mvs.getValue(); MibValueSymbol parent = mvs.getParent(); String parentValue = ""; System.err.println("name==" + name); System.err.println("value==" + value); System.err.println("isTableColumn==" + isTableColumn); if (parent != null) { parentValue = parent.getValue().toString(); if (parent.getParent()==null){ System.err.println("supperParentName======" + mibName); System.err.println("supperParentValue=====" + parentValue); } System.err.println("parentName=" + parent.getName()); System.err.println("parentValue=" + parent.getValue()); } else { } System.err.println("syntax=" + syntax); System.err.println("access=" + access); System.err.println("status=" + status); System.err.println("-------------------------------------"); mo.setName(name); mo.setValue(value.toString()); mo.setParent(parentValue); mo.setSyntax(syntax); mo.setAccess(access); mo.setStatus(status); list.add(mo); } } /*MibValueSymbol mvs = mib.getSymbolByOid("1.3.6.1.2.1.10"); System.err.println("mvs.getName()=" + mvs.getName()); System.err.println("mvs.getValue()=" + mvs.getValue()); MibValueSymbol parent = mvs.getParent(); System.err.println("parent=" + parent); */return list;} public static void main(String[] args) throws IOException, MibLoaderException { MibFileParse t = new MibFileParse(); char a = File.separatorChar;String abPath = System.getProperty("user.dir");String filePath = abPath + a + "src" + a + "main" + a + "webapp" + a + "mib" + a + "ISM-HUAWEI-MIB.mib";t.getMib(filePath); }
}
这里我使用了maven库引用了两个MIB包分别是Mibble及 Mibble MIBs 两个包,注意一定要两个都引入,如果只导入了第一个包,会导致MibLoader文件的时候异常失效,引入的方法直接在maven的官方库下载就可以。
https://mvnrepository.com/artifact/net.percederberg.mibble
引入的时候如果下载不下来jar包,可以尝试修改maven库里的setting.xml文件,将其中的<url></url>标签里的内容改为如下:
还有需要注意一点是图中引入的xxx.bean.MmMib是一个实体类,用来存储采集到的信息,方便存入集合。
引入成功后,运行测试方法,可以看见采集成功,后面的处理大家都明白了吧。
转载请标明出处
关于使用JAVA进行MIB文件解析相关推荐
- java实现Excel文件解析---apache POI以及把汉字转化为拼音
java实现Excel文件解析----apache POI以及把汉字转化为拼音 1.POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供给Java程序对Microso ...
- java怎么xml文件解析_Java对Xml文件解析
JAVA 解析 XML 通常有两种方式,DOM 和 SAX. DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一 ...
- 基于Java的NetCDF文件解析
近期在做的项目中,需要使用Java语言进行NetCDF文件的解析. 然而,当在寻找资料时,发现基于Java语言的资料相较于Python少了很多,而且现有的基于Java解析NetCDF文件到CSV的资料 ...
- java中 Excel文件解析及超大Excel文件读写
本文主要对Excel中数据的解析和生成进行总结 前言 在应用程序的开发过程中,我们经常要用到Excel进行数据的导入或导出.所以,在通过Java语言实现此类需求时,通常会对Excel文件进行解析或生成 ...
- 【E文件解析】Java实现E文件解析为对象
参照一位大佬贡献的代码修改的(扩展了对象解析,修改了一些bug,比如流异常未关闭) E语言解析包_e文件-Java代码类资源-CSDN下载 封装好了,三行代码解析为对象 github: https: ...
- snmp中mib文件解析
mib文件的配置 在进行接口对接和数据访问中避免直接使用oid的情况, 使用时可将编写的新库放在管理端的mibs库中(/usr/share/snmp/mibs) ACCEL-PPP-MIB DEFIN ...
- java ios乱码_相同的后台java代码,txt文件解析,安卓解析正常,IOS却是乱码,PC解析也正常.......
中文乱码,之所以出现这种现象,根本原因是解析和编码所按照的字符集不 同,而字符集是什么呢? ``` 字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同, ...
- java sax xml文件解析_java解析xml文件-DOM/SAX
java解析xml文件的两种方式 1:DOM 原理:把整个文档加载到内存,转化成dom树,之后应用程序可以随机的访问dom树的任何数据,灵活 快,但消耗内存 一个简单的xml 使用java解析 //b ...
- java之class文件解析
文章整体目录 前言 1.魔数 2.版本号 3.常量池 3.1.常量池大小 3.2.常量池内容 4.类的访问控制权限 5.类名 6.接口 6.1.实现的接口个数 6.2.接口内容 7.属性 7.1.属性 ...
- Java中的文件解析——Excel解析
在日常的开发过程中,经常会使用到excel工作簿进行数据的保存,那么在java中,通常会使用第三方提供的技术来进行excel文件的解析,比如:Apache POI.JXL.Alibaba EasyEx ...
最新文章
- Swift与LLVM-Clang原理与示例
- 请收下这份NLP热门词汇解读
- D5RPG引擎的一些笔记
- SAP云平台里的日志系统概述
- C++多线程快速入门(二)共享数据同步以及数据竞争
- 远端WWW服务支持TRACE请求漏洞修复(linux)
- 手机蓝牙如何减少延时_JEET ONE真无线耳机测评-高颜值低延时的集合
- Apache commons-text和Configuration 命令执行CVE-2022-42889/CVE-2022-33980分析
- 基于ESP8266芯片的实时温湿度传感器
- php 将中文字符转英文字母_php中怎么将中文转换拼音
- skip gram模型的实现
- 使用wait函数获取子进程终止状态
- Win10系统安装3dsmax2014常见问题及解决方案
- 塑料壳上下扣合的卡扣设计_塑胶件结构设计之止口与扣位的设计
- zonecreate
- matlab求莫兰指数程序,python计算莫兰指数(Moran's I)并绘制地区热力图——以中国各省pm2.5为例...
- 闹钟定时设计c语言编程,单片机定时闹钟(课程设计).docx
- 电路图:重低音功放电路
- 微信小程序用户数据的签名校验和加解密 - 后端nodejs
- VMware Workstation虚拟机安装Windows_server_2012_r2镜像文件
热门文章
- Linux chmod、fchmod函数
- PMP搞心态,解读最新『三大领域』考试内容:(附上第7版教材)
- MySQL图形化管理工具
- JS前端怎样通过程序来获取当前浏览器是什么版本的浏览器(或者判断当前浏览器是否为IE8及以下浏览器)
- 因用了NeatUpload大文件上传控件而导致Nonfile portion 4194304 bytes错误的解决方法...
- mysql安装_win版
- 51单片机蜂鸣器实现歌曲《起风了》代码
- java 练手小项目
- html在线预览显示pdf文件,pdf.js插件
- c语言编辑回文数,C语言实例 回文数