Java代码如何判断linux系统windows系统
苍穹之跃 人气:0Java代码判断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 InputStreamReader(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("获取结束!"); } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
加载全部内容