62,621
社区成员
发帖
与我相关
我的任务
分享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%