Java使用dos(cmd wmic)获取计算机(Windows)硬件信息

接上篇Java使用Bash获取Linux硬件序列号信息icon-default.png?t=M1H3https://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:3C

ProcessorId
BFEBFBFF000806EC

SerialNumber
L1HF08W009A

SerialNumber
PF1A8XRQ

 3.信息格式化

根据自身需要不同,做对应数据的格式化即可。

4.不同电脑上的结果对比

因为我和同事电脑为同批采购,硬件配置一致,在对比结果之后,发现 CpuProcessorId 值为相同值,其余值均不相同;由此判断 CpuProcessorId 应该不是CPU序列号,在网上搜索之后,也没有得到准确的答案。

5.后记

CPU序列号被屏蔽后,同批CPU编号就是相同的了
取网卡的MAC地址也不可靠,取到的不是网卡物理的MAC,而是系统中的(可修改);
取硬盘的序列号也不是很灵,有的硬盘取不到,而且取到的序列号长度也不同;

以上内容来源于网络,如果需要做加密的话,需要谨慎考虑。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值