参考:关于使用JAVA进行MIB文件解析_java 解析mib文件-CSDN博客
今天有幸使用java帮同学解决解析MIB(Management Infomation Base)文件
在线下载链接,两个jar 都要导入
mibble-2.9.3.jar 和mibble-mibs-2.9.3.jar
如果是maven 项目可以用 maven 仓库
如果下载不下来可以将maven 的setting.xml 的下载URL 改成 http://repo.opennms.org/maven2/
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
//文件工具类
public class FileUtil {
/**
* 获取一个文件夹下的所有文件全路径
*
* @param path 文件夹路径
* @param listFileName 没有元素的新ArrayList
*/
public static void getAllFileName(String path, ArrayList<String> listFileName) {
File file = new File(path);
File[] files = file.listFiles();
String[] names = file.list();
if (names != null) {
// String[] completNames = new String[names.length];
for (int i = 0; i < names.length; i++) {
names[i] = path + names[i];
}
listFileName.addAll(Arrays.asList(names));
}
for (File a : files) {
if (a.isDirectory()) {//如果文件夹下有子文件夹,获取子文件夹下的所有文件全路径。
getAllFileName(a.getAbsolutePath() + "\\", listFileName);
}
}
}
public static void main(String[] args) {
ArrayList<String> listFileName = new ArrayList<>();
FileUtil.getAllFileName("C:\\Desktop\\test", listFileName);
/*for (String name : listFileName) {
if (name.toLowerCase().endsWith(".mib")) {
System.out.println(name);
}
}*/
//上面的for循环用下面这一行代替
listFileName.stream().filter(name->name.toLowerCase().endsWith(".mib")).forEach(System.out::println);
}
}
/**
MmMib实体
* 这个文件可有可无,没有用到
*/
public class MmMib {
private String name;
private String value;
private String parent;
private String syntax;
private String access;
private String status;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
public String getSyntax() {
return syntax;
}
public void setSyntax(String syntax) {
this.syntax = syntax;
}
public String getAccess() {
return access;
}
public void setAccess(String access) {
this.access = access;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
import net.percederberg.mibble.*;
import net.percederberg.mibble.snmp.SnmpObjectType;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
/**
* MIB(Management Information Base) 文件解析器
*/
public class MibFileParser {
public List<MmMib> getMib(String filePath) throws IOException, MibLoaderException {
MibLoader ml = new MibLoader();
Mib mib = ml.load(new File(filePath));
String mibName = mib.getName();
System.err.println("mibName===" + mibName);
System.err.println("-------------------------------------");
String syntax = "",access = "", status = "";
List<MmMib> list = new ArrayList<>();
Collection c = mib.getAllSymbols();//返回的其实是一个ArrayList
Iterator it = c.iterator();//可以用 Collection 的foreach(Consumer<T> c)替代
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());
}
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 {
MibFileParser t = new MibFileParser();
ArrayList<String> listFileName = new ArrayList<>();
FileUtil.getAllFileName("C:\\Desktop\\test", listFileName);
int i=0;
for (String name : listFileName) {
if (name.toLowerCase().endsWith(".mib") ) {
System.out.println(name);
try{
t.getMib(name);
}catch (Exception e){
i++;
System.out.println("第"+i+"文件出现异常,文件名:"+name+" "+e.getMessage());
}
}
}
//listFileName.stream().filter(name.toLowerCase().endsWith(".mib")).forEach(System.out::println);
}
}