接上篇Java使用Bash获取Linux硬件序列号信息https://blog.csdn.net/rick_xk/article/details/122997441
本文使用cmd中wmic命令获取Win系统下硬件信息
1.wmic命令获取Win系统下硬件信息
1、查询网卡信息:wmic nicconfig get macaddress
2、查询cpu序列号:wmic cpu get processorid
3、查询主板序列号:wmic baseboard get serialnumber
4、查询BIOS序列号:wmic bios get serialnumber
2.使用Java调用dos命令,得到硬件信息
调用形式上,和调用Linux命令是一致的,需要关注的点有两个地方,启动命令从 "/bin/sh" 变为 "cmd.exe",返回流中需要注意编码设置为 "GBK"。
/**
* 执行dos 命令
* @date 2022年2月18日上午9:06:31
* @param cmd 命令Str
* @return
*/
private static String exec(String cmd) {
try {
String[] cmdA = { "cmd.exe", "/c", cmd };
Process process = Runtime.getRuntime().exec(cmdA);
LineNumberReader br = new LineNumberReader(new InputStreamReader(process.getInputStream(), "GBK"));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
// System.out.println(line);
line = line.trim();
if(line.length() > 0){
sb.append(line).append("\n");
}
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取Mac地址
* @date 2022年2月18日上午10:56:21
* @return
*/
public static String getMacAddress(){
final String dosCmd = "wmic nicconfig get macaddress";
String netsString = exec(dosCmd);
return netsString;
}
/**
* 获取CPU ID
* @date 2022年2月18日上午10:56:32
* @return
*/
public static String getCpuProcessorId(){
final String dosCmd = "wmic cpu get processorid";
String netsString = exec(dosCmd);
return netsString;
}
/**
* 获取主板序列号
* @date 2022年2月18日上午10:56:46
* @return
*/
public static String getBaseBoardSerialnumber(){
final String dosCmd = "wmic baseboard get serialnumber";
String netsString = exec(dosCmd);
return netsString;
}
/**
* 获取Bios序列号
* @date 2022年2月18日上午10:56:57
* @return
*/
public static String getBiosSerialnumber(){
final String dosCmd = "wmic bios get serialnumber";
String netsString = exec(dosCmd);
return netsString;
}
public static void main(String[] args) {
System.out.println("==========获得值=============");
String macAddress = getMacAddress();
String cpuProcessorId = getCpuProcessorId();
String baseBoardSerialnumber = getBaseBoardSerialnumber();
String biosSerialnumber = getBiosSerialnumber();
System.out.println(macAddress);
System.out.println(cpuProcessorId);
System.out.println(baseBoardSerialnumber);
System.out.println(biosSerialnumber);
}
得到运行结果为:
==========获得值=============
MACAddress
40:65:20:52:41:53
44:59:20:52:41:53
48:D0:20:52:41:53
A4:B1:C1:B7:E7:C4
A4:B1:C1:B7:E7:C5
54:05:DB:36:3C:3C
A6:B1:C1:B7:E7:C4
00:FF:9A:76:B0:1A
00:FF:46:1B:2E:3CProcessorId
BFEBFBFF000806ECSerialNumber
L1HF08W009ASerialNumber
PF1A8XRQ
3.信息格式化
根据自身需要不同,做对应数据的格式化即可。
4.不同电脑上的结果对比
因为我和同事电脑为同批采购,硬件配置一致,在对比结果之后,发现 CpuProcessorId 值为相同值,其余值均不相同;由此判断 CpuProcessorId 应该不是CPU序列号,在网上搜索之后,也没有得到准确的答案。
5.后记
CPU序列号被屏蔽后,同批CPU编号就是相同的了
取网卡的MAC地址也不可靠,取到的不是网卡物理的MAC,而是系统中的(可修改);
取硬盘的序列号也不是很灵,有的硬盘取不到,而且取到的序列号长度也不同;
以上内容来源于网络,如果需要做加密的话,需要谨慎考虑。