From adae16c35c9da4181647b9d815f7a6c9c6431ee8 Mon Sep 17 00:00:00 2001
From: ZY <zc857179121@qq.com>
Date: 星期三, 25 九月 2024 15:02:17 +0800
Subject: [PATCH] linux证书兼容
---
zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/controller/LicenseCreatorController.java | 2
zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/entity/license/SerialNumberUtil.java | 263 +++++++++++++++++++++++++++++++++++++++++++
zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/entity/license/CustomLicenseManager.java | 2
zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/entity/license/LinuxServerInfos.java | 47 +++++++
4 files changed, 312 insertions(+), 2 deletions(-)
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/controller/LicenseCreatorController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/controller/LicenseCreatorController.java
index 6efc1d0..f746d9d 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/controller/LicenseCreatorController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/controller/LicenseCreatorController.java
@@ -51,7 +51,7 @@
if (osName.startsWith("windows")) {
abstractServerInfos = new WindowsServerInfos();
} else if (osName.startsWith("linux")) {
-// abstractServerInfos = new LinuxServerInfos();
+ abstractServerInfos = new LinuxServerInfos();
}else{//鍏朵粬鏈嶅姟鍣ㄧ被鍨�
abstractServerInfos = new WindowsServerInfos();
}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/entity/license/CustomLicenseManager.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/entity/license/CustomLicenseManager.java
index 072e9cd..4704e30 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/entity/license/CustomLicenseManager.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/entity/license/CustomLicenseManager.java
@@ -196,7 +196,7 @@
if (osName.startsWith("windows")) {
abstractServerInfos = new WindowsServerInfos();
} else if (osName.startsWith("linux")) {
-// abstractServerInfos = new LinuxServerInfos();
+ abstractServerInfos = new LinuxServerInfos();
}else{//鍏朵粬鏈嶅姟鍣ㄧ被鍨�
abstractServerInfos = new WindowsServerInfos();
}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/entity/license/LinuxServerInfos.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/entity/license/LinuxServerInfos.java
new file mode 100644
index 0000000..4959be1
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/entity/license/LinuxServerInfos.java
@@ -0,0 +1,47 @@
+package com.zy.asrs.wms.system.license.entity.license;
+
+import java.net.InetAddress;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鐢ㄤ簬鑾峰彇瀹㈡埛Windows鏈嶅姟鍣ㄧ殑鍩烘湰淇℃伅
+ */
+public class LinuxServerInfos extends AbstractServerInfos {
+
+ @Override
+ protected List<String> getIpAddress() throws Exception {
+ List<String> result = null;
+ //鑾峰彇鎵�鏈夌綉缁滄帴鍙�
+ List<InetAddress> inetAddresses = getLocalAllInetAddress();
+ if(inetAddresses != null && inetAddresses.size() > 0){
+ result = inetAddresses.stream().map(InetAddress::getHostAddress).distinct().map(String::toLowerCase).collect(Collectors.toList());
+ }
+ return result;
+ }
+
+ @Override
+ protected List<String> getMacAddress() throws Exception {
+ List<String> result = null;
+
+ //1. 鑾峰彇鎵�鏈夌綉缁滄帴鍙�
+ List<InetAddress> inetAddresses = getLocalAllInetAddress();
+
+ if (inetAddresses != null && inetAddresses.size() > 0) {
+ //2. 鑾峰彇鎵�鏈夌綉缁滄帴鍙g殑Mac鍦板潃
+ result = inetAddresses.stream().map(this::getMacByInetAddress).distinct().collect(Collectors.toList());
+ }
+
+ return result;
+ }
+
+ @Override
+ protected String getCPUSerial() throws Exception {
+ return SerialNumberUtil.getSerialNumber("dmidecode -t processor | grep 'ID'", "ID", ":");
+ }
+
+ @Override
+ protected String getMainBoardSerial() throws Exception {
+ return SerialNumberUtil.getSerialNumber("dmidecode |grep 'Serial Number'", "Serial Number", ":");
+ }
+}
\ No newline at end of file
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/entity/license/SerialNumberUtil.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/entity/license/SerialNumberUtil.java
new file mode 100644
index 0000000..f9bc951
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/license/entity/license/SerialNumberUtil.java
@@ -0,0 +1,263 @@
+package com.zy.asrs.wms.system.license.entity.license;
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+public class SerialNumberUtil {
+
+
+ /**
+ * 鑾峰彇涓绘澘搴忓垪鍙�
+ *
+ * @return
+ */
+ public static String getMotherboardSN() {
+ String result = "";
+ try {
+ File file = File.createTempFile("realhowto", ".vbs");
+ file.deleteOnExit();
+ FileWriter fw = new 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();
+ String path = file.getPath().replace("%20", " ");
+ Process p = Runtime.getRuntime().exec("cscript //NoLogo " + path);
+ BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ String line;
+ while ((line = input.readLine()) != null) {
+ result += line;
+ }
+ input.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return result.trim();
+ }
+
+ /**
+ * 鑾峰彇纭洏搴忓垪鍙�(璇ユ柟娉曡幏鍙栫殑鏄� 鐩樼鐨勯�昏緫搴忓垪鍙�,骞朵笉鏄‖鐩樻湰韬殑搴忓垪鍙�)
+ * 纭洏搴忓垪鍙疯繕鍦ㄧ爺绌朵腑
+ *
+ * @param drive 鐩樼
+ * @return
+ */
+ public static String getHardDiskSN(String drive) {
+ String result = "";
+ try {
+ File file = File.createTempFile("realhowto", ".vbs");
+ file.deleteOnExit();
+ FileWriter fw = new FileWriter(file);
+
+ String vbs = "Set objFSO = CreateObject(\"Scripting.FileSystemObject\")\n" + "Set colDrives = objFSO.Drives\n" + "Set objDrive = colDrives.item(\"" + drive + "\")\n" + "Wscript.Echo objDrive.SerialNumber"; // see note
+ fw.write(vbs);
+ fw.close();
+ String path = file.getPath().replace("%20", " ");
+ Process p = Runtime.getRuntime().exec("cscript //NoLogo " + path);
+ BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ String line;
+ while ((line = input.readLine()) != null) {
+ result += line;
+ }
+ input.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return result.trim();
+ }
+
+ /**
+ * 鑾峰彇CPU搴忓垪鍙�
+ *
+ * @return
+ */
+ public static String getCPUSerial() {
+ String result = "";
+ try {
+ File file = File.createTempFile("tmp", ".vbs");
+ file.deleteOnExit();
+ FileWriter fw = new 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";
+
+ // + " exit for \r\n" + "Next";
+ fw.write(vbs);
+ fw.close();
+ String path = file.getPath().replace("%20", " ");
+ Process p = Runtime.getRuntime().exec("cscript //NoLogo " + path);
+ BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ String line;
+ while ((line = input.readLine()) != null) {
+ result += line;
+ }
+ input.close();
+ file.delete();
+ } catch (Exception e) {
+ e.fillInStackTrace();
+ }
+ if (result.trim().length() < 1 || result == null) {
+ result = "鏃燙PU_ID琚鍙�";
+ }
+ return result.trim();
+ }
+
+ private static List<String> getLocalHostLANAddress() throws UnknownHostException, SocketException {
+ List<String> ips = new ArrayList<String>();
+ Enumeration<NetworkInterface> interfs = NetworkInterface.getNetworkInterfaces();
+ while (interfs.hasMoreElements()) {
+ NetworkInterface interf = interfs.nextElement();
+ Enumeration<InetAddress> addres = interf.getInetAddresses();
+ while (addres.hasMoreElements()) {
+ InetAddress in = addres.nextElement();
+ if (in instanceof Inet4Address) {
+ System.out.println("v4:" + in.getHostAddress());
+ if (!"127.0.0.1".equals(in.getHostAddress())) {
+ ips.add(in.getHostAddress());
+ }
+ }
+ }
+ }
+ return ips;
+ }
+
+ /**
+ * MAC
+ * 閫氳繃jdk鑷甫鐨勬柟娉�,鍏堣幏鍙栨湰鏈烘墍鏈夌殑ip,鐒跺悗閫氳繃NetworkInterface鑾峰彇mac鍦板潃
+ *
+ * @return
+ */
+ public static String getMac() {
+ try {
+ String resultStr = "";
+ List<String> ls = getLocalHostLANAddress();
+ for (String str : ls) {
+ InetAddress ia = InetAddress.getByName(str);// 鑾峰彇鏈湴IP瀵硅薄
+ // 鑾峰緱缃戠粶鎺ュ彛瀵硅薄锛堝嵆缃戝崱锛夛紝骞跺緱鍒癿ac鍦板潃锛宮ac鍦板潃瀛樺湪浜庝竴涓猙yte鏁扮粍涓��
+ byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();
+ // 涓嬮潰浠g爜鏄妸mac鍦板潃鎷艰鎴怱tring
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < mac.length; i++) {
+ if (i != 0) {
+ sb.append("-");
+ }
+ // mac[i] & 0xFF 鏄负浜嗘妸byte杞寲涓烘鏁存暟
+ String s = Integer.toHexString(mac[i] & 0xFF);
+ sb.append(s.length() == 1 ? 0 + s : s);
+ }
+ // 鎶婂瓧绗︿覆鎵�鏈夊皬鍐欏瓧姣嶆敼涓哄ぇ鍐欐垚涓烘瑙勭殑mac鍦板潃骞惰繑鍥�
+ resultStr += sb.toString().toUpperCase() + ",";
+ }
+ return resultStr;
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ return null;
+ }
+
+ /***************************linux*********************************/
+
+ public static String executeLinuxCmd(String cmd) {
+ try {
+ //System.out.println("got cmd job : " + cmd);
+ Runtime run = Runtime.getRuntime();
+ Process process;
+ process = run.exec(cmd);
+ InputStream in = process.getInputStream();
+ BufferedReader bs = new BufferedReader(new InputStreamReader(in));
+ StringBuffer out = new StringBuffer();
+ byte[] b = new byte[8192];
+ for (int n; (n = in.read(b)) != -1; ) {
+ out.append(new String(b, 0, n));
+ }
+ in.close();
+ process.destroy();
+ return out.toString();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * @param cmd 鍛戒护璇彞
+ * @param record 瑕佹煡鐪嬬殑瀛楁
+ * @param symbol 鍒嗛殧绗�
+ * @return
+ */
+ public static String getSerialNumber(String cmd, String record, String symbol) {
+ String execResult = executeLinuxCmd(cmd);
+ String[] infos = execResult.split("\n");
+
+ for (String info : infos) {
+ info = info.trim();
+ if (info.indexOf(record) != -1) {
+ info.replace(" ", "");
+ String[] sn = info.split(symbol);
+ return sn[1];
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * 鑾峰彇CPUID銆佺‖鐩樺簭鍒楀彿銆丮AC鍦板潃銆佷富鏉垮簭鍒楀彿
+ *
+ * @return
+ */
+ public static Map<String, String> getAllSn() {
+ String os = System.getProperty("os.name");
+ os = os.toUpperCase();
+ System.out.println(os);
+
+ Map<String, String> snVo = new HashMap<String, String>();
+
+ if (os.contains("LINUX")) {
+ System.out.println("=============>for linux");
+ String cpuid = getSerialNumber("dmidecode -t processor | grep 'ID'", "ID", ":");
+ System.out.println("cpuid : " + cpuid);
+ String mainboardNumber = getSerialNumber("dmidecode |grep 'Serial Number'", "Serial Number", ":");
+ System.out.println("mainboardNumber : " + mainboardNumber);
+ String diskNumber = getSerialNumber("fdisk -l", "Disk identifier", ":");
+ System.out.println("diskNumber : " + diskNumber);
+ String mac = getSerialNumber("ifconfig -a", "ether", " ");
+
+ snVo.put("cpuid", cpuid.toUpperCase().replace(" ", ""));
+ snVo.put("diskid", diskNumber.toUpperCase().replace(" ", ""));
+ snVo.put("mac", mac.toUpperCase().replace(" ", ""));
+ snVo.put("mainboard", mainboardNumber.toUpperCase().replace(" ", ""));
+ } else {
+ System.out.println("=============>for windows");
+ String cpuid = SerialNumberUtil.getCPUSerial();
+ String mainboard = SerialNumberUtil.getMotherboardSN();
+ String disk = SerialNumberUtil.getHardDiskSN("c");
+ String mac = SerialNumberUtil.getMac();
+
+ System.out.println("CPU SN:" + cpuid);
+ System.out.println("涓绘澘 SN:" + mainboard);
+ System.out.println("C鐩� SN:" + disk);
+ System.out.println("MAC SN:" + mac);
+
+ snVo.put("cpuid", cpuid.toUpperCase().replace(" ", ""));
+ snVo.put("diskid", disk.toUpperCase().replace(" ", ""));
+ snVo.put("mac", mac.toUpperCase().replace(" ", ""));
+ snVo.put("mainboard", mainboard.toUpperCase().replace(" ", ""));
+ }
+
+ return snVo;
+ }
+
+ /**
+ * linux
+ * cpuid : dmidecode -t processor | grep 'ID'
+ * mainboard : dmidecode |grep 'Serial Number'
+ * disk : fdisk -l
+ * mac : ifconfig -a
+ *
+ * @param args
+ */
+ public static void main(String[] args) {
+ getAllSn();
+ }
+}
--
Gitblit v1.9.1