有对SNMP4J熟悉的吗,如何用它读取硬盘使用信息啊

qlyy840116 2010-04-06 02:55:15
要读取远程计算机的硬盘使用信息,网上查了查,好像说SNMP4j可以,请做过的大虾给点提示,最好有点代码,再此先谢过了
...全文
375 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
aoxiang16888 2011-07-07
  • 打赏
  • 举报
回复
import java.util.List;

import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.Target;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;
import org.snmp4j.util.DefaultPDUFactory;
import org.snmp4j.util.PDUFactory;
import org.snmp4j.util.TableEvent;
import org.snmp4j.util.TableUtils;

public class SnmpLogicTable {

public PDU getPDU(String stOID, int iType) {
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID(stOID)));
pdu.setType(iType);
return pdu;
}

public Target getTarget(String stIP) {
Address targetAddress = GenericAddress.parse(stIP);
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
target.setVersion(SnmpConstants.version2c);
target.setTimeout(1000);
target.setRetries(1);
return target;
}

public String getSNMP(String stIP, String stPort, String stOID, int iType) {
Target target = getTarget(stIP + "/" + stPort);
String getvalue = null;
try {
//Example for Sending an Asynchronous Message
DefaultUdpTransportMapping udpTransportMap = new DefaultUdpTransportMapping();

//udpTransportMap.listen();
Snmp snmp = new Snmp(udpTransportMap);
snmp.listen();

PDUFactory pf = new DefaultPDUFactory(PDU.GET);
TableUtils tu = new TableUtils(snmp, pf);
OID[] columns = new OID[1];
columns[0] = new VariableBinding(new OID(stOID)).getOid();
List list = tu.getTable(target, columns, null, null);
for (int i = 0; i < list.size(); i++) {
// System.out.println(i+"======I====");
TableEvent te = (TableEvent) list.get(i);
VariableBinding[] vb = te.getColumns();
for (int j = 0; j < vb.length; j++) {
// System.out.println(j+"=====J======");
System.out.println(vb[j]);
// System.out.println(vb[j].getVariable());
}
}

snmp.close();
} catch (Exception e) {
e.printStackTrace();
}
return getvalue;
}

public static void main(String[] args) {
SnmpLogicTable snmp = new SnmpLogicTable();
String ret = snmp.getSNMP("192.168.0.144", "161",
".1.3.6.1.2.1.25.2.3", PDU.GET);
}

}
hrStorageRam 表示内存, hrStorageFixedDisk 表示硬盘, hrStorageVirtualMemory 表示虚拟内存, hrStorageCompactDisc 表示光盘

2. 区分各个磁盘/分区的类型

1.3.6.1.2.1.25.2.3.1.2.1 = 1.3.6.1.2.1.25.2.1.4 [ObjectIdentifier] //硬盘
1.3.6.1.2.1.25.2.3.1.2.2 = 1.3.6.1.2.1.25.2.1.4 [ObjectIdentifier] //硬盘
1.3.6.1.2.1.25.2.3.1.2.3 = 1.3.6.1.2.1.25.2.1.4 [ObjectIdentifier] //硬盘
1.3.6.1.2.1.25.2.3.1.2.4 = 1.3.6.1.2.1.25.2.1.4 [ObjectIdentifier] //硬盘
1.3.6.1.2.1.25.2.3.1.2.5 = 1.3.6.1.2.1.25.2.1.7 [ObjectIdentifier] //光盘
1.3.6.1.2.1.25.2.3.1.2.6 = 1.3.6.1.2.1.25.2.1.7 [ObjectIdentifier] //光盘
1.3.6.1.2.1.25.2.3.1.2.7 = 1.3.6.1.2.1.25.2.1.3 [ObjectIdentifier] //虚拟内存
1.3.6.1.2.1.25.2.3.1.2.8 = 1.3.6.1.2.1.25.2.1.2 [ObjectIdentifier] //物理内存


3. Disk/分区 Information OID:

1.3.6.1.2.1.25.2.3.1.3.1 = "C:\ Label: Serial Number dc26ea33" [Octets]
1.3.6.1.2.1.25.2.3.1.3.2 = "D:\ Label:test Serial Number 9629f314" [Octets]
1.3.6.1.2.1.25.2.3.1.3.3 = "E:\ Label:test_backup Serial Number 94389268" [Octets]
1.3.6.1.2.1.25.2.3.1.3.4 = "F:\ Label:others Serial Number 5c4002e8" [Octets]
1.3.6.1.2.1.25.2.3.1.3.5 = "G:\" [Octets]
1.3.6.1.2.1.25.2.3.1.3.6 = "H:\ Label:Oracle10g Serial Number b1c04dbe" [Octets]
1.3.6.1.2.1.25.2.3.1.3.7 = "Virtual Memory" [Octets]
1.3.6.1.2.1.25.2.3.1.3.8 = "Physical Memory" [Octets]

4. StorageAllocationUnits OID:也叫每个箸/块的大小

1.3.6.1.2.1.25.2.3.1.4.1 = 512 [Integer]
1.3.6.1.2.1.25.2.3.1.4.2 = 4096 [Integer]
1.3.6.1.2.1.25.2.3.1.4.3 = 4096 [Integer]
1.3.6.1.2.1.25.2.3.1.4.4 = 4096 [Integer]
1.3.6.1.2.1.25.2.3.1.4.5 = 0 [Integer]
1.3.6.1.2.1.25.2.3.1.4.6 = 2048 [Integer]
1.3.6.1.2.1.25.2.3.1.4.7 = 65536 [Integer]
1.3.6.1.2.1.25.2.3.1.4.8 = 65536 [Integer]


5.StorageSize OID:一个磁盘分为多少块/箸, 总大小

1.3.6.1.2.1.25.2.3.1.5.1 = 25157789 [Integer]
1.3.6.1.2.1.25.2.3.1.5.2 = 2815383 [Integer]
1.3.6.1.2.1.25.2.3.1.5.3 = 4096567 [Integer]
1.3.6.1.2.1.25.2.3.1.5.4 = 11006525 [Integer]
1.3.6.1.2.1.25.2.3.1.5.5 = 0 [Integer]
1.3.6.1.2.1.25.2.3.1.5.6 = 317298 [Integer]
1.3.6.1.2.1.25.2.3.1.5.7 = 63101 [Integer]
1.3.6.1.2.1.25.2.3.1.5.8 = 32754 [Integer]


6. StorageUsed OID://已经使用的块/箸

1.3.6.1.2.1.25.2.3.1.6.1 = 7427924 [Integer]
1.3.6.1.2.1.25.2.3.1.6.2 = 861039 [Integer]
1.3.6.1.2.1.25.2.3.1.6.3 = 16820 [Integer]
1.3.6.1.2.1.25.2.3.1.6.4 = 5788717 [Integer]
1.3.6.1.2.1.25.2.3.1.6.5 = 0 [Integer]
1.3.6.1.2.1.25.2.3.1.6.6 = 317298 [Integer]
1.3.6.1.2.1.25.2.3.1.6.7 = 12172 [Integer]
1.3.6.1.2.1.25.2.3.1.6.8 = 13270 [Integer]

7. StorageAllocationFailures OID://分配失败的块/箸

1.3.6.1.2.1.25.2.3.1.7.1 = 0 [Counter32]
1.3.6.1.2.1.25.2.3.1.7.2 = 0 [Counter32]
1.3.6.1.2.1.25.2.3.1.7.3 = 0 [Counter32]
1.3.6.1.2.1.25.2.3.1.7.4 = 0 [Counter32]
1.3.6.1.2.1.25.2.3.1.7.5 = 0 [Counter32]
1.3.6.1.2.1.25.2.3.1.7.6 = 0 [Counter32]
1.3.6.1.2.1.25.2.3.1.7.7 = 0 [Counter32]
1.3.6.1.2.1.25.2.3.1.7.8 = 0 [Counter32]

8. 在这个例子中
可以看到的盘符是C: D: E: F:; 同时可以得到虚拟内存信息,物理内存的信息

C: 盘大小为512× 25157789= 12880787968bytes or 12GB

C: 盘以用空间512×7427924= 3803097088bytes or 3.54GB

C:盘使用率为3.54/12*100% = 29.5%

C: 盘空间分配错误512×0 = 0 bytes

硬盘总的大小为512*25157789 + 4096*2815383 + 4096*4096567+ 4096*11006525 = about 80G

磁盘使用大小为512*7427924 + 4096*861039 + 4096*16820 + 4096*5788717 = about 29G

整个硬盘的使用率 29/80 *100% = 36.2%


物理内存

Total RAM 65536*32754 = 2096256 KB, 2047.125M about 2G 这个数字和1.3.6.1.2.1.25.2.2.0结果差不多

Used RAM 65536*13270 = 829M

内存使用率 829/2048 * 100% = 40.4%


amdgaming 2010-04-06
  • 打赏
  • 举报
回复
不熟悉,看看

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧