Java使用Bash获取Linux硬件序列号信息

需求:希望项目和服务器硬件绑定,自购硬件服务器,非云上虚拟服务器。

所以获取服务器硬件序列号,做加密运算后得到验证字符串,现记录Java使用Bash获取Linux硬件序列号代码。

1.获取Linux硬件信息命令行

使用 dmidecode 命令获取服务器详细硬件信息,因为我们需要获取到硬件序列号信息,所以使用dmidecode | grep 'Serial Number' 过滤得到序列号信息,如下图所示。

2. 使用Java调用Bash命令,得到上图信息

创建 LinuxInfoCollect.java 文件,内部代码如下

/**
 * 执行Linux 命令
 * @date 2022年2月18日上午9:06:31
 * @param cmd 命令Str
 * @return
 */
private static String exec(String cmd) {
	try {
		String[] cmdA = { "/bin/sh", "-c", cmd };
		Process process = Runtime.getRuntime().exec(cmdA);
		LineNumberReader br = new LineNumberReader(new InputStreamReader(process.getInputStream()));
		StringBuffer sb = new StringBuffer();
		String line;
		while ((line = br.readLine()) != null) {
			System.out.println(line);
			line = line.trim();
			sb.append(line).append("\n");
		}
		return sb.toString();
	} catch (Exception e) {
		e.printStackTrace();
	}
	return null;
}

public static void main(String[] args) {
	String netsString = exec("dmidecode | grep 'Serial Number'");

	System.out.println("==========获得值=============");
	System.out.println(netsString);
}

在服务器上运行,得到下图结果: 

 已经得到硬件序列号信息。

3.格式化序列号信息

从图中可以看到,有部分序列号是空串或者是"Not Specified"字串,我们需要根据自己的需求,做字符串的处理即可。我的处理流程为,剔除空串以及"Not Specified"字串,然后使用Collections.sort(serialNumbers)默认排序规则,做序列号的排序,得到最终值。

[/BCC02L3/CNFCW001BP00C3/, 17E30442, BCC02L3, BCC02L3]

 4.不同类型服务器的情况

经测试

实体服务器上运行正常,可以得到硬件序列号;

在阿里云ECS上运行,仅能得到一个字符串,为 System Information 下序列号,其他硬件信息均无法得到。

在移动云ECS上运行,无法得到任何序列号。

 

如果有其他服务器测试结果,在评论区指出。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值