|  |  |  | 
|---|
|  |  |  | 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 = "无CPU_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对象 | 
|---|
|  |  |  | // 获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。 | 
|---|
|  |  |  | byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress(); | 
|---|
|  |  |  | // 下面代码是把mac地址拼装成String | 
|---|
|  |  |  | 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、硬盘序列号、MAC地址、主板序列号 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @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(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 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 = "无CPU_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对象 | 
|---|
|  |  |  | // 获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。 | 
|---|
|  |  |  | byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress(); | 
|---|
|  |  |  | // 下面代码是把mac地址拼装成String | 
|---|
|  |  |  | 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、硬盘序列号、MAC地址、主板序列号 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @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(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|