系统工具类

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

/**
 * 系统工具类
 * @author zql
 * @createTime 2020-11-30 22:12:42
 * @version 1.1
 * @modifyLog 1.1 优化代码
 *
 */
public class SystemUtil {

	/**
	 * 获得本机的IP
	 * @author zql
	 * @createTime 2020-11-30 22:13:02
	 *
	 * @return
	 */
	public static String getLocalIp() {
		String localIp = null;
		try {
			localIp = InetAddress.getLocalHost().getHostAddress();
		} catch (UnknownHostException e) {
			// TODO :zql,2020-10-14,[使用时打印日志]
			e.printStackTrace();
			System.err.println(e.getMessage());
		}
		return localIp;
	}
	
	/**
	 * 获得本机的名称
	 * @author zql
	 * @createTime 2020-11-30 22:13:15
	 * 
	 * @return 本机名称
	 */
	public static String getLocalName() {
		String localName = null;
		try {
			localName = InetAddress.getLocalHost().getHostName();
		} catch (UnknownHostException e) {
			// TODO :zql,2020-10-14,[使用时打印日志]
			e.printStackTrace();
			System.err.println(e.getMessage());
		}
		return localName;
	}
	
	/**
	 * 获得本机的MAC地址
	 * @author zql
	 * @createTime 2020-11-30 22:13:34
	 *
	 * @return 本机的MAC地址
	 */
	public static String getLocalMac() {
		String localMac = null;
		try {
			byte[] mac = NetworkInterface.getByInetAddress(InetAddress.getLocalHost()).getHardwareAddress();
			if (Objects.isNull(mac)) {
				System.err.println("获取网卡 MAC 地址失败,网卡可能被禁用!");
				return null;
			}
			StringBuilder sb = new StringBuilder();
			for (int i = 0; i < mac.length; i++) {
				if (i != 0) {
					sb.append("-");
				}
				// 字节转为整数
				int temp = mac[i] & 0xff;
				String s = Integer.toHexString(temp);
				if (s.length() == 1) {
					sb.append("0").append(s);
				} else {
					sb.append(s);
				}
			}
			localMac = sb.toString().toUpperCase();
		} catch (SocketException e) {
			// TODO :zql,2020-10-14,[使用时打印日志]
			e.printStackTrace();
			System.err.println(e.getMessage());
		} catch (UnknownHostException e) {
			// TODO :zql,2020-10-14,[使用时打印日志]
			e.printStackTrace();
			System.err.println(e.getMessage());
		}
		return localMac;
	}
	
	/**
	 * 获取来访者ip地址
	 * @author zql
	 * @createTime 2020-11-30 22:14:23
	 *
	 * @param request
	 * @return
	 */
	public static String getIpAddress(HttpServletRequest request) {
		String ipAddr = null;
		String ignore = "unknown";
		// 代理进来,则透过防火墙获取真实IP地址
		final String[] HEADERS_TO_TRY = { "X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP",
				"HTTP_X_FORWARDED_FOR", "HTTP_X_FORWARDED", "HTTP_X_CLUSTER_CLIENT_IP", "HTTP_CLIENT_IP",
				"HTTP_FORWARDED_FOR", "HTTP_FORWARDED", "HTTP_VIA", "REMOTE_ADDR", "X-Real-IP" };
		for (String header : HEADERS_TO_TRY) {
			String ip = request.getHeader(header);
			if (StringUtil.isNotBlank(ip) && !ignore.equalsIgnoreCase(ip)) {
				ipAddr = ip;
				break;
			}
		}
		// 如果没有代理,则获取真实ip,StringUtil工具:https://blog.csdn.net/mr_zql/article/details/100059370
		if (StringUtil.isBlank(ipAddr) || ignore.equalsIgnoreCase(ipAddr)) {
			ipAddr = request.getRemoteAddr();
		}
		ipAddr = ipAddr.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipAddr;
		return ipAddr;
	}
	
	/**
	 * 获取来访者的浏览器版本
	 * @author zql
	 * @createTime 2020-11-30 22:20:38
	 *
	 * @param request
	 * @return
	 */
	public static String getRequestBrowserInfo(HttpServletRequest request) {
		String browserVersion = null;
		String header = request.getHeader("user-agent");
		if (StringUtil.isBlank(header)) {
			return "";
		}
		browserVersion = BrowserVerEnum.getVersion(header);
		return browserVersion;
	}
	
	/**
	 * 获取系统版本信息
	 * @author zql
	 * @createTime 2020-11-30 22:20:24
	 *
	 * @param request
	 * @return
	 */
	public static String getRequestSystemInfo(HttpServletRequest request) {
		String systemInfo = null;
		String header = request.getHeader("user-agent");
		if (StringUtil.isBlank(header)) {
			return "";
		}
		// 得到用户的操作系统
		systemInfo = SystemInfoEnum.getInfo(header);
		return systemInfo;
	}
	
	/**
	 * 判断是否为合法IP
	 * @author zql
	 * @createTime 2020-11-30 22:18:02
	 *
	 * @param ipAddress
	 * @return
	 */
	public static boolean isValidIp(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();
	}
	
	/**
	 * 浏览器版本
	 * @author zql
	 * @createTime 2020-12-05 15:02:36
	 * @version 1.0
	 *
	 */
	enum BrowserVerEnum {
		IE_6("MSIE 6.0", "IE 6"),
		IE_7("MSIE 7.0", "IE 7"),
		IE_8("MSIE 8.0", "IE 8"),
		IE_9("MSIE 9.0", "IE 9"),
		IE_10("MSIE 10.0", "IE 10"),
		IE_11("rv:11.0", "IE 11"),
		FIREFOX("Firefox", "Firefox"),
		CHROME("Chrome", "Chrome"),
		SAFARI("Safari", "Safari"),
		CAMINO("Camino", "Camino"),
		KONQUEROR("Konqueror", "Konqueror");
		
		private String flag;
		
		private String ver;
		
		private BrowserVerEnum(String flag, String ver) {
			this.flag = flag;
			this.ver = ver;
		}
		
		public String getFlag() {
			return this.flag;
		}
		
		public String getVer() {
			return this.ver;
		}
		
		public static String getVersion(String header) {
			BrowserVerEnum[] bvs = BrowserVerEnum.values();
			for (BrowserVerEnum bv : bvs) {
				if (header.indexOf(bv.getFlag()) > 0) {
					return bv.getVer();
				}
			}
			return "Undefined";
		}
		
	}
	
	/**
	 * 用户的操作系统
	 * @author zql
	 * @createTime 2020-12-05 15:02:36
	 * @version 1.0
	 *
	 */
	enum SystemInfoEnum {
		WINDOWS_VISTA_SERVER_2008("NT 6.0", "Windows Vista/Server 2008"),
		WINDOWS_SERVER_2003("NT 5.2", "Windows Server 2003"),
		WINDOWS_XP("NT 5.1", "Windows XP"),
		WINDOWS_VISTA("NT 6.0", "Windows Vista"),
		WINDOWS_7("NT 6.1", "Windows 7"),
		WINDOWS_SLATE("NT 6.2", "Windows Slate"),
		WINDOWS_9("NT 6.3", "Windows 9"),
		WINDOWS_10("NT 10.0", "Windows 10"),
		WINDOWS_2000("NT 5", "Windows 2000"),
		WINDOWS_NT4("NT 4", "Windows NT4"),
		WINDOWS_ME("Me", "Windows Me"),
		WINDOWS_98("98", "Windows 98"),
		WINDOWS_95("95", "Windows 95"),
		MAC("Mac", "Mac"),
		UNIX("Unix", "UNIX"),
		LINUX("Linux", "Linux"),
		SUNOS("SunOS", "SunOS");
		
		private String flag;
		
		private String info;
		
		private SystemInfoEnum(String flag, String info) {
			this.flag = flag;
			this.info = info;
		}
		
		public String getFlag() {
			return this.flag;
		}
		
		public String getInfo() {
			return this.info;
		}
		
		public static String getInfo(String header) {
			SystemInfoEnum[] sis = SystemInfoEnum.values();
			for (SystemInfoEnum si : sis) {
				if (header.indexOf(si.getFlag()) > 0) {
					return si.getInfo();
				}
			}
			return "Undefined";
		}
		
	}
	
}

普通项目需要引入的包
servlet-api-2.5.jar
commons-lang-2.5.jar

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值