欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

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

时间:2023-05-15

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

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

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

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

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

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

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上运行,无法得到任何序列号。

 

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

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。