(2011-03-27 00:16:12) 转载
分类: java开发 标签:
java读mac地址 cpu号 硬盘卷标 cpu型号 cpu使用率等 杂谈
在发布新版的MYPM时,加密要用到相关硬件信息,于是写了下面的测试类 运行main 打印信息如下图
需要引用的包sigar-1.6.3.jar
及相关动态库 测试时我加载了sigar自带所有动态库 详见main方法内
package cn.com.mypm.common.util;
import java.io.BufferedReader; import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import org.hyperic.sigar.CpuPerc; import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException; import org.hyperic.sigar.SigarLoader; import org.hyperic.sigar.cmd.Shell;
import org.hyperic.sigar.cmd.SigarCommandBase;
public class CpuInfo extends SigarCommandBase {
public boolean displayTimes = true;
public CpuInfo(Shell shell) {
super(shell); }
public CpuInfo() { super(); }
public String getUsageShort() {
return \"Display cpu information\"; }
private void output(CpuPerc cpu) {
println(\"User Time.....\" + CpuPerc.format(cpu.getUser())); println(\"Sys Time......\" + CpuPerc.format(cpu.getSys())); println(\"Idle Time.....\" + CpuPerc.format(cpu.getIdle())); println(\"Wait Time.....\" + CpuPerc.format(cpu.getWait())); println(\"Nice Time.....\" + CpuPerc.format(cpu.getNice()));
println(\"Combined......\" + CpuPerc.format(cpu.getCombined())); println(\"Irq Time......\" + CpuPerc.format(cpu.getIrq())); if (SigarLoader.IS_LINUX) {
println(\"SoftIrq Time..\" + CpuPerc.format(cpu.getSoftIrq())); println(\"Stolen Time....\" + CpuPerc.format(cpu.getStolen())); }
println(\"\"); }
public void output(String[] args) throws SigarException {
org.hyperic.sigar.CpuInfo[] infos = this.sigar.getCpuInfoList();
CpuPerc[] cpus = this.sigar.getCpuPercList();
org.hyperic.sigar.CpuInfo info = infos[0]; long cacheSize = info.getCacheSize(); println(\"Vendor.........\" + info.getVendor()); println(\"Model..........\" + info.getModel()); println(\"Mhz............\" + info.getMhz());
println(\"Total CPUs.....\" + info.getTotalCores());
if ((info.getTotalCores() != info.getTotalSockets()) || (info.getCoresPerSocket() > info.getTotalCores())) {
println(\"Physical CPUs..\" + info.getTotalSockets()); println(\"Cores per CPU..\" + info.getCoresPerSocket()); }
if (cacheSize != Sigar.FIELD_NOTIMPL) { println(\"Cache size....\" + cacheSize);
}
println(\"\");
if (!this.displayTimes) { return; }
for (int i = 0; i < cpus.length; i++) { println(\"CPU \" + i + \".........\"); output(cpus[i]); }
println(\"Totals........\");
output(this.sigar.getCpuPerc());
StringBuffer sb=new StringBuffer(\"cpu号=\"+getCPUSerial()+\"\\n\");
String[] interfaces = sigar.getNetInterfaceList(); if(interfaces!=null || interfaces.length>0)
sb.append(\"第一个网卡号=\"+sigar.getNetInterfaceConfig(interfaces[0]).getHwaddr());
org.hyperic.sigar.FileSystem[] filesystems = sigar.getFileSystemList(); if(filesystems!=null || filesystems.length>0) sb.append(\"\\n\"+\"硬盘第一个分区的卷标=\"+getHDSerial(filesystems[1].getDevName()));
System.out.println(sb.toString()); }
public static void main(String[] args) throws Exception {
//先加载siga动太库在不同的平台只要加载特定的动态库,这里我就全加载不区分了 //在IDE环境中,可以不加载动态库 设置natinve lib patch location 既可
File nativeDir = new File(\"E:\\\\mypm10_new\\\\mypmdoc\\\\WebRoot\\\\WEB-INF\\\\native\"); File[] libs = nativeDir.listFiles(); for (int i = 0; i < libs.length; i++) { if (libs[i].isFile()) try {
System.load(new File(nativeDir, libs[i].getName()).getPath()); } catch (Throwable t) {
} }
new CpuInfo().processCommand(args); }
public static double getCpuIdle() {
Sigar sigar = null; try {
sigar = new Sigar();
return sigar.getCpuPerc().getIdle(); } catch (Throwable t) { t.printStackTrace(); } finally {
if (sigar != null) sigar.close(); }
return 0; }
public static String getHDSerial(String drive) { String result = \"\"; try {
File file = File.createTempFile(\"tmp\ file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);
String vbs = \"Set objFSO = CreateObject(\\\"Scripting.FileSystemObject\\\")\\n\"
+ \"Set colDrives = objFSO.Drives\\n\" + \"Set objDrive = colDrives.item(\\\"\" + drive + \"\\\")\\n\"
+ \"Wscript.Echo objDrive.SerialNumber\"; fw.write(vbs); fw.close();
Process p = Runtime.getRuntime().exec(\"cscript //NoLogo \" + file.getPath()); BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); String line;
while ((line = input.readLine()) != null) { result += line; }
input.close(); file.delete();
} catch (Exception e) {
}
if (result.trim().length() < 1 || result == null) { result = \"无磁盘ID被读取\";
}
return result.trim(); }
public static String getCPUSerial() { String result = \"\"; try {
File file = File.createTempFile(\"tmp\ file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);
String vbs = \"On Error Resume Next \\r\\n\\r\\n\" + \"strComputer = \\\".\\\" \\r\\n\" + \"Set objWMIService = GetObject(\\\"winmgmts:\\\" _ \\r\\n\"
+ \" & \\\"{impersonationLevel=impersonate}!\\\\\\\\\\\" & strComputer & \\\"\\\\root\\\\cimv2\\\") \\r\\n\"
+ \"Set colItems = objWMIService.ExecQuery(\\\"Select * from Win32_Processor\\\") \\r\\n \"
+ \"For Each objItem in colItems\\r\\n \" + \" Wscript.Echo objItem.ProcessorId \\r\\n \"
+ \" exit for ' do the first cpu only! \\r\\n\" + \"Next \";
fw.write(vbs); fw.close();
Process p = Runtime.getRuntime().exec(\"cscript //NoLogo \" + file.getPath()); BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); String line;
while ((line = input.readLine()) != null) { result += line; }
input.close(); file.delete();
} catch (Exception e) { e.fillInStackTrace(); }
if (result.trim().length() < 1 || result == null) { result = \"无CPU_ID被读取\"; }
return result.trim(); } }
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务