yangys
2025-05-26 2ba2c339acf41fd7bb2a49f0ce186fd664a80cb5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package com.qianwen.license.common;
 
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
 
public abstract class AbstractServerInfos {
     private static Logger logger = LoggerFactory.getLogger(AbstractServerInfos.class);
 
        /**
         * 组装需要额外校验的License参数
         * @author zifangsky
         * @date 2018/4/23 14:23
         * @since 1.0.0
         * @return demo.LicenseCheckModel
         */
        public LicenseExtraModel getServerInfos(){
            LicenseExtraModel result = new LicenseExtraModel();
            
            try {
                result.setIpAddress(this.getIpAddress());
                result.setMacAddress(this.getMacAddress());
                result.setCpuSerial(this.getCPUSerial());
                result.setMainBoardSerial(this.getMainBoardSerial());
            }catch (Exception e){
                logger.error("获取服务器硬件信息失败",e);
            }
 
            return result;
        }
 
        /**
         * 获取IP地址
         * @author zifangsky
         * @date 2018/4/23 11:32
         * @since 1.0.0
         * @return java.util.List<java.lang.String>
         */
        protected abstract List<String> getIpAddress() throws Exception;
 
        /**
         * 获取Mac地址
         * @author zifangsky
         * @date 2018/4/23 11:32
         * @since 1.0.0
         * @return java.util.List<java.lang.String>
         */
        protected abstract List<String> getMacAddress() throws Exception;
 
        /**
         * 获取CPU序列号
         * @author zifangsky
         * @date 2018/4/23 11:35
         * @since 1.0.0
         * @return java.lang.String
         */
        protected abstract String getCPUSerial() throws Exception;
 
        /**
         * 获取主板序列号
         * @author zifangsky
         * @date 2018/4/23 11:35
         * @since 1.0.0
         * @return java.lang.String
         */
        protected abstract String getMainBoardSerial() throws Exception;
 
        /**
         * 获取当前服务器所有符合条件的InetAddress
         * @author zifangsky
         * @date 2018/4/23 17:38
         * @since 1.0.0
         * @return java.util.List<java.net.InetAddress>
         */
        protected List<InetAddress> getLocalAllInetAddress() throws Exception {
            List<InetAddress> result = new ArrayList<>(4);
 
            // 遍历所有的网络接口
            for (Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces(); networkInterfaces.hasMoreElements(); ) {
                NetworkInterface iface = (NetworkInterface) networkInterfaces.nextElement();
                // 在所有的接口下再遍历IP
                for (Enumeration inetAddresses = iface.getInetAddresses(); inetAddresses.hasMoreElements(); ) {
                    InetAddress inetAddr = (InetAddress) inetAddresses.nextElement();
 
                    //排除LoopbackAddress、SiteLocalAddress、LinkLocalAddress、MulticastAddress类型的IP地址
                    if(!inetAddr.isLoopbackAddress() /*&& !inetAddr.isSiteLocalAddress()*/
                            && !inetAddr.isLinkLocalAddress() && !inetAddr.isMulticastAddress()){
                        result.add(inetAddr);
                    }
                }
            }
 
            return result;
        }
 
        /**
         * 获取某个网络接口的Mac地址
         * @author zifangsky
         * @date 2018/4/23 18:08
         * @since 1.0.0
         * @param
         * @return void
         */
        protected String getMacByInetAddress(InetAddress inetAddr){
            try {
                byte[] mac = NetworkInterface.getByInetAddress(inetAddr).getHardwareAddress();
                StringBuffer stringBuffer = new StringBuffer();
 
                for(int i=0;i<mac.length;i++){
                    if(i != 0) {
                        stringBuffer.append("-");
                    }
 
                    //将十六进制byte转化为字符串
                    String temp = Integer.toHexString(mac[i] & 0xff);
                    if(temp.length() == 1){
                        stringBuffer.append("0" + temp);
                    }else{
                        stringBuffer.append(temp);
                    }
                }
 
                return stringBuffer.toString().toUpperCase();
            } catch (SocketException e) {
                e.printStackTrace();
            }
 
            return null;
        }
}