最近工作上有功能需求解析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文件解析相关推荐

  1. java实现Excel文件解析---apache POI以及把汉字转化为拼音

    java实现Excel文件解析----apache  POI以及把汉字转化为拼音 1.POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供给Java程序对Microso ...

  2. java怎么xml文件解析_Java对Xml文件解析

    JAVA 解析 XML 通常有两种方式,DOM 和 SAX. DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一 ...

  3. 基于Java的NetCDF文件解析

    近期在做的项目中,需要使用Java语言进行NetCDF文件的解析. 然而,当在寻找资料时,发现基于Java语言的资料相较于Python少了很多,而且现有的基于Java解析NetCDF文件到CSV的资料 ...

  4. java中 Excel文件解析及超大Excel文件读写

    本文主要对Excel中数据的解析和生成进行总结 前言 在应用程序的开发过程中,我们经常要用到Excel进行数据的导入或导出.所以,在通过Java语言实现此类需求时,通常会对Excel文件进行解析或生成 ...

  5. 【E文件解析】Java实现E文件解析为对象

    参照一位大佬贡献的代码修改的(扩展了对象解析,修改了一些bug,比如流异常未关闭) E语言解析包_e文件-Java代码类资源-CSDN下载 封装好了,三行代码解析为对象 github:  https: ...

  6. snmp中mib文件解析

    mib文件的配置 在进行接口对接和数据访问中避免直接使用oid的情况, 使用时可将编写的新库放在管理端的mibs库中(/usr/share/snmp/mibs) ACCEL-PPP-MIB DEFIN ...

  7. java ios乱码_相同的后台java代码,txt文件解析,安卓解析正常,IOS却是乱码,PC解析也正常.......

    中文乱码,之所以出现这种现象,根本原因是解析和编码所按照的字符集不 同,而字符集是什么呢? ``` 字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同, ...

  8. java sax xml文件解析_java解析xml文件-DOM/SAX

    java解析xml文件的两种方式 1:DOM 原理:把整个文档加载到内存,转化成dom树,之后应用程序可以随机的访问dom树的任何数据,灵活 快,但消耗内存 一个简单的xml 使用java解析 //b ...

  9. java之class文件解析

    文章整体目录 前言 1.魔数 2.版本号 3.常量池 3.1.常量池大小 3.2.常量池内容 4.类的访问控制权限 5.类名 6.接口 6.1.实现的接口个数 6.2.接口内容 7.属性 7.1.属性 ...

  10. Java中的文件解析——Excel解析

    在日常的开发过程中,经常会使用到excel工作簿进行数据的保存,那么在java中,通常会使用第三方提供的技术来进行excel文件的解析,比如:Apache POI.JXL.Alibaba EasyEx ...

最新文章

  1. Swift与LLVM-Clang原理与示例
  2. 请收下这份NLP热门词汇解读
  3. D5RPG引擎的一些笔记
  4. SAP云平台里的日志系统概述
  5. C++多线程快速入门(二)共享数据同步以及数据竞争
  6. 远端WWW服务支持TRACE请求漏洞修复(linux)
  7. 手机蓝牙如何减少延时_JEET ONE真无线耳机测评-高颜值低延时的集合
  8. Apache commons-text和Configuration 命令执行CVE-2022-42889/CVE-2022-33980分析
  9. 基于ESP8266芯片的实时温湿度传感器
  10. php 将中文字符转英文字母_php中怎么将中文转换拼音
  11. skip gram模型的实现
  12. 使用wait函数获取子进程终止状态
  13. Win10系统安装3dsmax2014常见问题及解决方案
  14. 塑料壳上下扣合的卡扣设计_塑胶件结构设计之止口与扣位的设计
  15. zonecreate
  16. matlab求莫兰指数程序,python计算莫兰指数(Moran's I)并绘制地区热力图——以中国各省pm2.5为例...
  17. 闹钟定时设计c语言编程,单片机定时闹钟(课程设计).docx
  18. 电路图:重低音功放电路
  19. 微信小程序用户数据的签名校验和加解密 - 后端nodejs
  20. VMware Workstation虚拟机安装Windows_server_2012_r2镜像文件

热门文章

  1. Linux chmod、fchmod函数
  2. PMP搞心态,解读最新『三大领域』考试内容:(附上第7版教材)
  3. MySQL图形化管理工具
  4. JS前端怎样通过程序来获取当前浏览器是什么版本的浏览器(或者判断当前浏览器是否为IE8及以下浏览器)
  5. 因用了NeatUpload大文件上传控件而导致Nonfile portion 4194304 bytes错误的解决方法...
  6. mysql安装_win版
  7. 51单片机蜂鸣器实现歌曲《起风了》代码
  8. java 练手小项目
  9. html在线预览显示pdf文件,pdf.js插件
  10. c语言编辑回文数,C语言实例 回文数