Java代码如何判断linux系统windows系统

2023-01-10 09:07:04

目录Java代码判断linux系统windows系统Java在Linux与windows系统下获取主板序列号,cpu序列号以及mac地址总结Java代码判断linux系统windows系统在使用硬件S...

目录
Java代码判断linux系统Windows系统
Java在Linux与Windows系统下获取主板序列号,cpu序列号以及MAC地址
总结

Java代码判断linux系统windows系统

在使用硬件SDK的时候,往往有windows、linux两套。

本地开发的时候使用windows,打包发布的时候使用linux,来回切换很麻烦。

可以使用下面的判断来加载不同版本的SDK。

package Commom;
 
public class osSelect {
 
    public static boolean isLinux() {
        return System.getProperty("os.name").toLowerCase().contains("linux");
    }
 
    public static boolean isWindows() {
        return System.getProperty("os.name").toLowerCase().contains("windows");
    }
 
}

Java在Linux与windows系统下获取主板序列号,cpu序列号以及mac地址

概述:

实现了获取当前操作系统名称,主板序列号,CPU序列号,mac地址的相关方法函数。

应对的场景是信创设备无法正常识别我们的加密狗,对于软件license的限制,我们通过系统当前日期以及绑定对方设备进行限制。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
 
public class DmcUtils {
 
 
/**
 * 获取当前操作系统名称
 */
public static String getOSName() {
return System.getProperty("os.name").toLowerCase();
}
 
// 主板序列号 windows
public static String getMainBordId_windows() {
String result = "";
try {
File file = File.createTempFile("realhowto", ".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_BaseBoard\") \n"
+ "For Each objItem in colItems \n" + "    Wscript.Echo objItem.SerialNumber \n"
+ "    exit for  ' do the first cpu only! \n" + "Next \n";
 
fw.write(vbs);
fw.close();
Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
result += line;
}
input.close();
} catch (Exception e) {
System.out.print("获取主板信息错误");
 
}
return result.trim();
}
 
// 主板序列号 linux
public static String getMainBordId_linux() {
 
String result = "";
String maniBord_cmd = "dmidecode | grep 'Serial Number' | awk '{print $3}' | tail -1";
Process p;
try {
p = Runtime.getRuntime().exec(new String[] { "sh", "-c", maniBord_cmd });// 管道
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
result += line;
break;
}
br.close();
} catch (IOException e) {
System.out.print("获取主板信息错误");
}
return result;
}
 
/**
 * 获取mac地址 (如果Linux下有eth0这个网卡)
 */
public static String getMAC_linux() {
String mac = null;
BufferedReader bufferedReader = null;
Process process = null;
try {
// linux下的命令,一般取eth0作为本地主网卡
process = Runtime.getRuntime().exec("ifconfig eth0");
// 显示信息中包含有mac地址信息
bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null) {
// 寻找标示字符串[hwaddr]
index = line.toLowerCase().indexOf("hwaddr");
if (index >= 0) {// 找到了
// 取出mac地址并去除2边空格
mac = line.substring(index + "hwaddr".length() + 1).trim();
break;
}
}
} catch (IOException e) {
System.out.print("获取mac信息错误");
 
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
} catch (IOException e1) {
System.out.print("获取mac信息错误");
}
bufferedReader = null;
process = null;
}
return mac;
}
 
        /*
         * 获取Linux的mac
         */
        public static String getMAC_linuxs() {

String mac = null;
BufferedReader bufferedReader = null;
Process process = null;
try {
// linux下的命令,一般取eth0作为本地主网卡
process = Runtime.getRuntime().exec("ifconfig");
// 显示信息中包含有mac地址信息
bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
int index = -1;
 while ((line = bufferedReader.readLine()) != null) 
 {
 Pattern pat = Pattern.compile("\\b\\w+:\\w+:\\w+:\\w+:\\w+:\w+\\b");
 Matcher mat= pat.matcher(line);
 if(mat.find())
 {
 mac=mat.group(0);
 }
 }
 
} catch (IOException e) {
System.out.print("获取mac信息错误");
 
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
} catch (IOException e1) {
System.out.print("获取mac信息错误");
 
}
bufferedReader = null;
process = null;
}
return mac;
}
 
 
/**
 * 获取widnows网卡的mac地址.
 */
public static String getMAC_windows() {
InetAddress ip = null;
NetworkInterface ni = null;
List<String> macList = new ArrayList<String>();
try {
Enumeration<NetworkInterface> netInterfaces = (Enumeration<NetworkInterface>) NetworkInterface
.getNetworkInterfaces();
while (netInterfaces.hasMoreElements()) {
ni = (NetworkInterface) netInterfaces.nextElement();
// ----------特定情况,可以考虑用ni.getName判断
// 遍历所有ip
Enumeration<InetAddress> ips = ni.getInetAddresses();
while (ips.hasMoreElements()) {
ip = (InetAddress) ips.nextElement();
if (!ip.isLoopbackAddress() // 非127.0.0.1
&& ip.getHostAddress().matches("(\\d{1,3}\\.){3}\\d{1,3}")) {
macList.add(getMacFromBytes(ni.getHardwareAddress()));
}
}
}
} catch (Exception e) {
System.out.print("获取mac信息错误");
 
}
if (macList.size() > 0) {
return macList.get(0);
} else {
return "";
}
 
}
 
private static String getMacFromBytes(byte[] bytes) {
StringBuffer mac = new StringBuffer();
byte currentByte;
boolean first = false;
for (byte b : bytes) {
if (first) {
mac.append("-");
}
currentByte = (byte) ((b & 240) >> 4);
mac.append(Integer.toHexString(currentByte));
currentByte = (byte) (b & 15);
mac.append(Integer.toHexString(currentByte));
first = true;
}
return mac.toString().toUpperCase();
}
 
/**
 * 获取CPU序列号 Windows
 * 
 * @return
 */
public static String getCPUID_Windows() {
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";
 
fw.write(vbs);
fw.close();
Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
result += line;
}
input.close();
file.delete();
} catch (Exception e) {
System.out.print("获取mac信息错误");
}
return result.trim();
}
 
/**
 * 获取CPU序列号 linux
 * 
 * @return
 */
public static String getCPUID_linux() throws InterruptedException {
String result = "";
String CPU_ID_CMD = "dmidecode";
BufferedReader bufferedReader = null;
Process p = null;
try {
p = Runtime.getRuntime().exec(new String[] { "sh", "-c", CPU_ID_CMD });// 管道
bufferedReader = new BufferedReader(new InputStreamReapythonder(p.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null) {
// 寻找标示字符串[hwaddr]
index = line.toLowerCase().indexOf("uuid");
if (index >= 0) {// 找到了
// 取出mac地址并去除2边空格
result = line.substring(index + "uuid".length() + 1).trim();
break;
}
}
 
} catch (IOException e) {
System.out.print("获取mac信息错误");
}
return result.trim();
}

public static void main(String [] args) throws Exception {
System.out.println("开始获取!");
String cpuId=getCPUID_linux();
System.out.println("linux cpuId:"+cpuId);
//String cpuId=  getCPUID_Windows();
//System.out.println("Windows cpuId:"+cpuId);
String bordId= getMainBordId_linux();
System.out.println("linux bordId:"+bordId);
//String bordId=  getMainBordId_windows();
//System.out.println("Windows bordId:"+bordId);
System.out.println("获取结束!");
}
 
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。