java获取电脑部分信息

时间:2021-06-02 13:20:02

获取mac地址与cpu序列号

参考博客:https://www.jb51.net/article/94793.htm

另一篇参考地址没记录下来

package util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* @todo 获取电脑配置信息
* @author zhangyanan
* @date 2018年8月6日
*/
public class CpuUtil {
private static final Logger logger = LoggerFactory.getLogger(CpuUtil.class);/**
* @todo 获取电脑cpu序列号
* @author zhangyanan
* @date 2018年8月6日
*/
public static String getCPUSerial() {
String os = System.getProperty("os.name");
if (os.toLowerCase().startsWith("win")) {
return CpuUtil.getWindowsCPUSerial();
} else {
return CpuUtil.getLinuxCPUSerial();
} } /**
* @todo windows获取cpu序列号
* @author zhangyanan
* @date 2018年8月6日
*/
public static String getWindowsCPUSerial() {
String serial = null;
try {
Process process = Runtime.getRuntime().exec(new String[] { "wmic", "cpu", "get", "ProcessorId" });
process.getOutputStream().close();
Scanner sc = new Scanner(process.getInputStream());
sc.next();
serial = sc.next();
sc.close();
} catch (Exception e) {
logger.error("getWindowsCPUSerial异常", e);
}
return serial;
} /**
* @todo linux获取cpu序列号
* @author zhangyanan
* @date 2018年8月6日
*/
public static String getLinuxCPUSerial() {
String result = "";
try {
File file = File.createTempFile("tmp", ".vbs");
file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);
String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"
+ "Set colItems = objWMIService.ExecQuery _ \n" + " (\"Select * from Win32_Processor\") \n"
+ "For Each objItem in colItems \n" + " Wscript.Echo objItem.ProcessorId \n"
+ " exit for ' do the first cpu only! \n" + "Next \n"; // + " exit for \r\n" + "Next";
fw.write(vbs);
fw.close();
String path = file.getPath().replace("%20", " ");
Process p = Runtime.getRuntime().exec("cscript //NoLogo " + path);
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
result += line;
}
input.close();
file.delete();
} catch (Exception e) {
logger.error("getLinuxCPUSerial异常", e);
} return result;
} /**
* @todo 获取mac地址
* @author zhangyanan
* @date 2018年8月6日
*/
public static String getMACAddress() {
InetAddress ia;
try {
ia = InetAddress.getLocalHost();
return getMACAddress(ia);
} catch (UnknownHostException e) {
logger.error("getMACAddress()异常", e);
return null;
} } /**
* @todo 获取mac地址
* @author zhangyanan
* @date 2018年8月6日
*/
public static String getMACAddress(InetAddress ia) {
// 获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。
try {
byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress(); // 下面代码是把mac地址拼装成String
StringBuffer sb = new StringBuffer(); for (int i = 0; i < mac.length; i++) {
if (i != 0) {
sb.append("-");
}
// mac[i] & 0xFF 是为了把byte转化为正整数
String s = Integer.toHexString(mac[i] & 0xFF);
sb.append(s.length() == 1 ? 0 + s : s);
} // 把字符串所有小写字母改为大写成为正规的mac地址并返回
return sb.toString().toUpperCase();
} catch (SocketException e) {
logger.error("getMACAddress异常!", e);
return null;
}
}
}