• 系统信息获取java工具类SystemUtil


    系统信息工具类SystemUtil

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    import javax.servlet.http.HttpServletRequest;
    
    /**
     * 获取系统的信息
     */
    public final class SystemUtil {
    
    	/**
    	 * 命令获取mac地址
    	 *
    	 * @param cmd
    	 * @return
    	 */
    	private static String callCmd(String[] cmd) {
    		String result = "";
    		String line = "";
    		try {
    			Process proc = Runtime.getRuntime().exec(cmd);
    			InputStreamReader is = new InputStreamReader(proc.getInputStream());
    			BufferedReader br = new BufferedReader(is);
    			while ((line = br.readLine()) != null) {
    				result += line;
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return result;
    	}
    
    	/**
    	 * @param cmd     第一个命令
    	 * @param another 第二个命令
    	 * @return 第二个命令的执行结果
    	 */
    
    	private static String callCmd(String[] cmd, String[] another) {
    		String result = "";
    		String line = "";
    		try {
    			Runtime rt = Runtime.getRuntime();
    			Process proc = rt.exec(cmd);
    			proc.waitFor(); // 已经执行完第一个命令,准备执行第二个命令
    			proc = rt.exec(another);
    			InputStreamReader is = new InputStreamReader(proc.getInputStream());
    			BufferedReader br = new BufferedReader(is);
    			while ((line = br.readLine()) != null) {
    				result += line;
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return result;
    	}
    
    	/**
    	 * @param ip           目标ip,一般在局域网内
    	 * @param sourceString 命令处理的结果字符串
    	 * @param macSeparator mac分隔符号
    	 * @return mac地址,用上面的分隔符号表示
    	 */
    
    	private static String filterMacAddress(final String ip, final String sourceString, final String macSeparator) {
    		String result = "";
    		String regExp = "((([0-9,A-F,a-f]{1,2}" + macSeparator + "){1,5})[0-9,A-F,a-f]{1,2})";
    		Pattern pattern = Pattern.compile(regExp);
    		Matcher matcher = pattern.matcher(sourceString);
    		while (matcher.find()) {
    			result = matcher.group(1);
    			if (sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(1))) {
    				break; // 如果有多个IP,只匹配本IP对应的Mac.
    			}
    		}
    		return result;
    	}
    
    	/**
    	 * 获取访问地址的IP
    	 */
    	public static String getHostAddress(HttpServletRequest request) {
    		String ipAddr = "";
    		InetAddress address = null;
    		try {
    			String serverName = request.getServerName();
    			if (isboolIp(serverName)) {
    				ipAddr = serverName;
    			} else {
    				address = InetAddress.getByName(serverName);
    				ipAddr = address.getHostAddress();
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return ipAddr;
    	}
    
    	/**
    	 * 获取来访者的主机名称
    	 *
    	 * @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 "";
    	}
    
    	/**
    	 * 获取访问者IP 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效。
    	 * <p>
    	 * 本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(用,分割), 如果还不存在则调用Request
    	 * .getRemoteAddr()。
    	 *
    	 * @param request
    	 * @return
    	 */
    	public static String getIpAddr(HttpServletRequest request) {
    		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();
    		}
    	}
    
    	/**
    	 * 获取MAC地址
    	 *
    	 * @return 返回MAC地址
    	 */
    	public static String getMacAddress(String ip) {
    		String macAddress = "";
    		macAddress = getMacInWindows(ip).trim();
    		if (macAddress == null || "".equals(macAddress)) {
    			macAddress = getMacInLinux(ip).trim();
    		}
    		return macAddress;
    	}
    
    	/**
    	 * @param ip 目标ip
    	 * @return Mac Address
    	 */
    	private static String getMacInLinux(final String ip) {
    		String result = "";
    		String[] cmd = { "/bin/sh", "-c", "ping " + ip + " -c 2 && arp -a" };
    		String cmdResult = callCmd(cmd);
    		result = filterMacAddress(ip, cmdResult, ":");
    		return result;
    	}
    
    	/**
    	 * @param ip 目标ip
    	 * @return Mac Address
    	 */
    
    	private static String getMacInWindows(final String ip) {
    		String result = "";
    		String[] cmd = { "cmd", "/c", "ping " + ip };
    		String[] another = { "cmd", "/c", "arp -a" };
    		String cmdResult = callCmd(cmd, another);
    		result = filterMacAddress(ip, cmdResult, "-");
    		return result;
    	}
    
    	/**
    	 * 获取来访者的浏览器版本
    	 *
    	 * @param request
    	 * @return
    	 */
    	public static String getRequestBrowserInfo(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 getRequestSystemInfo(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("98") > 0) {
    			systenInfo = "Windows 98";
    		} else if (header.indexOf("95") > 0) {
    			systenInfo = "Windows 95";
    		} 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;
    	}
    
    	/**
    	 * 判断是否为合法IP * @return the ip
    	 */
    	public static boolean isboolIp(String ipAddress) {
    		String ip = "([1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])(\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])){3}";
    		Pattern pattern = Pattern.compile(ip);
    		Matcher matcher = pattern.matcher(ipAddress);
    		return matcher.matches();
    	}
    
    	public static void main(String[] args) {
    		InetAddress address = null;
    		try {
    			address = InetAddress.getByName("f0rb.iteye.com");
    		} catch (UnknownHostException e) {
    			e.printStackTrace();
    			System.out.println("获取失败");
    		}
    		System.out.println(address.getHostAddress());
    	}
    }
    
    
  • 相关阅读:
    WPF入门教程系列六——布局介绍与Canvas(一)
    WPF入门教程系列五——Window 介绍
    WPF入门教程系列四——Dispatcher介绍
    WPF入门教程系列三——Application介绍(续)
    html5 标签
    html5
    sublime汉化教程
    html5 文本格式化
    主键和索引的区别
    响应式布局的开发基础知识
  • 原文地址:https://www.cnblogs.com/xusp/p/12736072.html
Copyright © 2020-2023  润新知