public static boolean readMibWalk(String ip, String community, SnmpOID[] oids, Vector[] resultList, Vector indexList) {
SnmpAPI snmpapi = null;
SnmpSession session = null;
try {
snmpapi = new SnmpAPI();
snmpapi.start();
session = new SnmpSession(snmpapi);
session.open();
SnmpPDU pdu = new SnmpPDU();
pdu.setRemoteHost(ip); //OLT上的ip
pdu.setRemotePort(161);
pdu.setCommunity(community);
pdu.setTimeout(5000);
pdu.setRetries(2);
pdu.setVersion(SnmpAPI.SNMP_VERSION_2C);
pdu.setCommand(SnmpAPI.GETNEXT_REQ_MSG);
for (int i = 0; i < oids.length; i++) { //第几个列(也就是第几个参数) ,i是列号
pdu.addNull(oids[i]);
resultList[i] = new Vector();
while (true) { //循环 ,读取每一行
SnmpPDU v = session.syncSend(pdu); //本次读回来得到的内容,下面是解析了
if (v == null) {
return false;
}
if (isInSubTree(oids[i].toIntArray(), v.getObjectID(0))) { //通过列的oid,去判断读的是不是还是这个列
String t = v.getVariableBinding(0).toString(); //索引+ 值
int index = t.indexOf(":");
resultList[i].add(t.substring(index + 2)); //存值
pdu.removeVariableBinding(0); //移除上一个行号
pdu.addNull(v.getObjectID(0)); //绑定当前行号,可以去读下一行
if (i == 0) { //读第一列的时候,记录索引号
String d = getIndexs(oids[i].toIntArray(), v.getObjectID(0)); //得到索引值
indexList.add(d);
}
} else {
break;
}
}
pdu.removeVariableBinding(0);
}
} catch (Exception ex) {
ex.printStackTrace();
return false;
} finally {
if (null != session) {
snmpapi.close();
session.close();
session = null;
}
}
return true;
}
public static boolean readMibBulk(String ip, String community, SnmpOID[] oids, Vector[] resultList, Vector indexList) {
SnmpAPI snmpapi = null;
SnmpSession session = null;
int maxRepInt = 25; //设置每次读的行数
try {
snmpapi = new SnmpAPI();
snmpapi.start();
session = new SnmpSession(snmpapi);
session.open();
SnmpPDU pdu = new SnmpPDU();
pdu.setRemoteHost(ip);
pdu.setRemotePort(161);
pdu.setCommunity(community);
pdu.setTimeout(5000);
pdu.setRetries(2);
pdu.setVersion(SnmpAPI.SNMP_VERSION_2C);
pdu.setCommand(SnmpAPI.GETBULK_REQ_MSG);
pdu.setMaxRepetitions(maxRepInt);
pdu.setNonRepeaters(0);
for (int i = 0; i < oids.length; i++) {
pdu.addNull(oids[i]);
resultList[i] = new Vector();
while (true) {
SnmpPDU v = session.syncSend(pdu);
if (v == null) {
return false;
}
int j = 0;
SnmpOID loid = null;
for (j = 0; j < maxRepInt; j++) { //再加了一个循环,循环这25行内是否有异常数据
if (isInSubTree(oids[i].toIntArray(), v.getObjectID(j))) {
String t = v.getVariableBinding(j).toString();
int index = t.indexOf(":");
resultList[i].add(t.substring(index + 2));
pdu.removeVariableBinding(j);
loid = v.getObjectID(j); //记录当前行号
String d = getIndexs(oids[i].toIntArray(), v.getObjectID(j));
indexList.add(d); //一直记录索引号,其实可以加上 if (i == 0)语句的
} else {
break; //如果读回来的25行中,第几行不是了,那么跳出循环
}
}
//是否是读完25行,没有跳出
if (j == maxRepInt) { //是,那么去读下一个25行,从loid行开始
pdu.addNull(loid);
} else {
break; //不是,有异常数据,接着跳出while循环
}
}
pdu.removeVariableBinding(0); // 读取下一列
}
} catch (Exception ex) {
ex.printStackTrace();
return false;
} finally {
if (null != session) {
snmpapi.close();
session.close();
session = null;
}
}
return true;
}
public static boolean isInSubTree(int oids[], SnmpOID snmpoid) { //oid设定的oid值,snmpoid为当前读取的oid值
if (snmpoid == null) {
return false;
}
int ai1[] = (int[]) snmpoid.toValue();
if (ai1 == null) {
return false;
}
int i = oids.length;
if (ai1.length < i) {
return false;
}
for (int j = i - 1; j >= 0; j--) {
if (ai1[j] != oids[j]) {
return false;
}
}
return true;
}
public static String getIndexs(int[] oids, SnmpOID snmpoid) {
String ret = "";
if (snmpoid == null) {
return "";
}
int ai1[] = (int[]) snmpoid.toValue();
if (ai1 == null) {
return "";
}
int i = oids.length;
if (ai1.length < i) {
return "";
}
for (int j = i - 1; j >= 0; j--) {
if (ai1[j] != oids[j]) {
return "";
}
}
for (int k = i; k < ai1.length; k++) {
ret = ret + ai1[k];
ret = ret + ".";
}
return ret;
}
分享到:
相关推荐
AdventNet_Agent_Toolkit_Java_Edition_6_0_0_keygen
MibBrower SNMP采数 Mib查看器 Adventnet MibBrower
adventnet 公司提供的免费snmp的lib 其公司网站上有api的文档
用于SNMP协议开发时用的 可编辑代理端 查看mib库等
AdventNet MIB Browser是一个便于用户使用的工具,用来测试和监管网络上的多个SNMP设备。它允许网络和系统工程师加载标准的或某些供应商专有的MIB,并通过设备上运行的SNMP代理检索有关软件和硬件配置的数据。
AdventNet SNMP API 4
这是2001年我用vc6.0写的一个mib浏览器的源码,运行时先打开目录下的RFC1155-SMI.txt,然后打开RFC1213-MIB.txt,然后再加载你自己的mib. 界面是仿制adventnet的mib browser风格 我已经很多年不用vc,也有很长...
AdventNet.DeviceExpert.Professional.5.3.1_KEYGEN-FFF.zip
基于adventnet类库的mib浏览器,实现评议C#
AdventNet SNMP Agent for Linux能简化网络中Linux机器的监控和管理,支持名为AdventNet-LINUX-MIB的预定义MIB,以及诸如MIB RFC-1213-MIB和HOST-RESOURCES-MIB的标准MIB。此外,它使用SNMP和HTTP控制台以便于管理。...
AdventNet.ManageEngine.OpManager.v7.2-SHOCK
SNMP 开发工具adventnet
关于snmp协议的,是AdventNet关于snmp协议的,对初学者很有帮助啊
测试snmp mib时所用软件,支持IPv6 mib获取
AdventNet snmp 简单网管协议 从接点取数据――之 Card 检测.zip
AdventNet SNMP API为基于SNMP的网络管理应用提供了一个全面的开发工具包。AdventNet的SNMP栈包含一系列强大的Java SNMP库,用来为监控和跟踪网络元素创建实时的应用程序,这些应用程序是可靠的、可伸展的且独立于OS...
泰信 adventnet Ems/NMS Corba 产品介绍,及一系列的开发工具
java实现 带完整源代码和文档 基于SNMP/MIB的网络数据获取系统设计与实现 基于AdventNet SNMP API 这是我以前做的课程,现在翻出来,拿出来跟大家共享!
manageengine firewall analyzer
AdventNet SNMP API为基于SNMP的网络管理应用提供了一个全面的开发工具包。AdventNet的SNMP栈包含一系列强大的Java SNMP库,用来为监控和跟踪网络元素创建实时的应用程序,这些应用程序是可靠的、可伸展的且独立于OS...