package com.fzzy.api.utils; import com.alibaba.fastjson.JSON; import com.fzzy.api.lic.AbstractServerInfos; import com.fzzy.api.lic.LicenseCheckModel; import com.fzzy.api.lic.LinuxServerInfos; import com.fzzy.api.lic.WindowsServerInfos; import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.UnknownHostException; import java.util.*; /** * @Desc: 获取客户登陆信息 * @author: andy.jia * @update-time: 2022/11/10 19:55 */ public class SystemUtil { /*** * 获取客户端IP地址 * @param request */ public static String getIP(HttpServletRequest request) { if (request == null) { return "127.0.0.1"; } String ip = request.getHeader("X-Real-IP"); if (ip != null && !"".equals(ip) && !"unknown".equalsIgnoreCase(ip)) { return ip; } ip = request.getHeader("X-Forwarded-For"); if (ip != null && !"".equals(ip) && !"unknown".equalsIgnoreCase(ip)) { // 多次反向代理后会有多个IP值,第一个为真实IP。 int index = ip.indexOf(','); if (index != -1) { return ip.substring(0, index); } else { return ip; } } else { return request.getRemoteAddr(); } } /** * 获取来访者的浏览器版本 * * @param request * @return */ public static String getBrowserInfo(HttpServletRequest request) { String browserVersion = null; String header = request.getHeader("user-agent"); if (header == null || header.equals("")) { return ""; } if (header.indexOf("MSIE 6.0") > 0) { browserVersion = "IE 6"; } else if (header.indexOf("MSIE 7.0") > 0) { browserVersion = "IE 7"; } else if (header.indexOf("MSIE 8.0") > 0) { browserVersion = "IE 8"; } else if (header.indexOf("MSIE 9.0") > 0) { browserVersion = "IE 9"; } else if (header.indexOf("MSIE 10.0") > 0) { browserVersion = "IE 10"; } else if (header.indexOf("rv:11.0") > 0) { browserVersion = "IE 11"; } else if (header.indexOf("Firefox") > 0) { browserVersion = "Firefox"; } else if (header.indexOf("Chrome") > 0) { browserVersion = "Chrome"; } else if (header.indexOf("Safari") > 0) { browserVersion = "Safari"; } else if (header.indexOf("Camino") > 0) { browserVersion = "Camino"; } else if (header.indexOf("Konqueror") > 0) { browserVersion = "Konqueror"; } return browserVersion; } /** * 获取系统版本信息 * * @param request * @return */ public static String getSystemInfo(HttpServletRequest request) { String systenInfo = null; String header = request.getHeader("user-agent"); if (header == null || header.equals("")) { return ""; } // 得到用户的操作系统 if (header.indexOf("NT 6.0") > 0) { systenInfo = "Windows Vista/Server 2008"; } else if (header.indexOf("NT 5.2") > 0) { systenInfo = "Windows Server 2003"; } else if (header.indexOf("NT 5.1") > 0) { systenInfo = "Windows XP"; } else if (header.indexOf("NT 6.0") > 0) { systenInfo = "Windows Vista"; } else if (header.indexOf("NT 6.1") > 0) { systenInfo = "Windows 7"; } else if (header.indexOf("NT 6.2") > 0) { systenInfo = "Windows Slate"; } else if (header.indexOf("NT 6.3") > 0) { systenInfo = "Windows 9"; } else if (header.indexOf("NT 10.0") > 0) { systenInfo = "Windows 10"; } else if (header.indexOf("NT 5") > 0) { systenInfo = "Windows 2000"; } else if (header.indexOf("NT 4") > 0) { systenInfo = "Windows NT4"; } else if (header.indexOf("Me") > 0) { systenInfo = "Windows Me"; } else if (header.indexOf("Mac") > 0) { systenInfo = "Mac"; } else if (header.indexOf("Unix") > 0) { systenInfo = "UNIX"; } else if (header.indexOf("Linux") > 0) { systenInfo = "Linux"; } else if (header.indexOf("SunOS") > 0) { systenInfo = "SunOS"; } return systenInfo; } /** * 获取来访者的主机名称 * * @param ip * @return */ public static String getHostName(String ip) { InetAddress inet; try { inet = InetAddress.getByName(ip); return inet.getHostName(); } catch (UnknownHostException e) { e.printStackTrace(); } return "未知"; } public static String getSystemInfo() throws Exception { String os = System.getProperty("os.name").toLowerCase(); Map param =null; AbstractServerInfos abstractServerInfos = null; if (os.indexOf("win") >= 0) { param = new HashMap<>(); abstractServerInfos = new WindowsServerInfos(); // Windows系统 LicenseCheckModel data = abstractServerInfos.getServerInfos(); //param.put("macAddress",data.getMacAddress()); param.put("cpuSerial",data.getCpuSerial()); param.put("mainBoardSerial",data.getMainBoardSerial()); } else if (os.indexOf("mac") >= 0) { // Mac系统 } else if (os.indexOf("nix") >= 0 || os.indexOf("nux") >= 0 || os.indexOf("aix") >= 0) { // Unix/Linux系统 param = new HashMap<>(); abstractServerInfos = new LinuxServerInfos(); LicenseCheckModel data = abstractServerInfos.getServerInfos(); //param.put("macAddress",data.getMacAddress()) ; param.put("cpuSerial",data.getCpuSerial()) ; param.put("mainBoardSerial",data.getMainBoardSerial()); } else if (os.indexOf("sunos") >= 0) { // Solaris系统 } else { // 未知的操作系统 } if(null == param){ return ""; }else { return JSON.toJSONString(param); } } /** * 获取当前服务器所有符合条件的InetAddress */ protected static List getLocalAllInetAddress() throws Exception { List 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; } }