当前位置 博文首页 > 谢哥哥的博客:【Java工具类合集】IpUtil-常用IP相关工具类

    谢哥哥的博客:【Java工具类合集】IpUtil-常用IP相关工具类

    作者:[db:作者] 时间:2021-07-13 13:12

    话不多说,直接上代码,记得一键三连哦~

    IpUtil.java

    import com.xgg.common.utils.str.StringUtils;
    import lombok.extern.slf4j.Slf4j;
    
    import javax.servlet.http.HttpServletRequest;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * IP相关工具类
     *
     * @author xiegege
     * @date 2021/02/22 16:08
     */
    @Slf4j
    public class IpUtil {
    
        /**
         * 获取当前网络ip
         */
        public static String getIpAddr(HttpServletRequest request) {
            String ipAddress = request.getHeader("x-forwarded-for");
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getHeader("Proxy-Client-IP");
            }
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getHeader("WL-Proxy-Client-IP");
            }
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getRemoteAddr();
                if ("127.0.0.1".equals(ipAddress) || "0:0:0:0:0:0:0:1".equals(ipAddress)) {
                    // 根据网卡取本机配置的IP
                    InetAddress inet = null;
                    try {
                        inet = InetAddress.getLocalHost();
                    } catch (UnknownHostException e) {
                        e.printStackTrace();
                    }
                    ipAddress = inet.getHostAddress();
                }
            }
            //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割  //"***.***.***.***".length() = 15
            if (ipAddress != null && ipAddress.length() > 15) {
                if (ipAddress.indexOf(",") > 0) {
                    ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
                }
            }
            return ipAddress;
        }
    
        /**
         * 获取真实IP
         */
        public static String getRealIp(HttpServletRequest request) {
            String ip = request.getHeader("x-forwarded-for");
            return checkIp(ip) ? ip : (
                    checkIp(ip = request.getHeader("Proxy-Client-IP")) ? ip : (
                            checkIp(ip = request.getHeader("WL-Proxy-Client-IP")) ? ip :
                                    request.getRemoteAddr()));
        }
    
        /**
         * 校验IP
         */
        private static boolean checkIp(String ip) {
            return !StringUtils.isEmpty(ip) && !"unknown".equalsIgnoreCase(ip);
        }
    
        /**
         * 获取操作系统,浏览器及浏览器版本信息
         */
        public static Map<String, String> getOsAndBrowserInfo(HttpServletRequest request) {
            String userAgent = request.getHeader("User-Agent");
            String user = userAgent.toLowerCase();
            String os;
            String browser = "";
    
            //=================OS Info=======================
            if (userAgent.toLowerCase().contains("windows")) {
                os = "Windows";
            } else if (userAgent.toLowerCase().contains("mac")) {
                os = "Mac";
            } else if (userAgent.toLowerCase().contains("x11")) {
                os = "Unix";
            } else if (userAgent.toLowerCase().contains("android")) {
                os = "Android";
            } else if (userAgent.toLowerCase().contains("iphone")) {
                os = "IPhone";
            } else {
                os = "UnKnown, More-Info: " + userAgent;
            }
    
            //===============Browser===========================
            try {
                if (user.contains("edge")) {
                    browser = (userAgent.substring(userAgent.indexOf("Edge")).split(" ")[0]).replace("/", "-");
                } else if (user.contains("msie")) {
                    String substring = userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0];
                    browser = substring.split(" ")[0].replace("MSIE", "IE") + "-" + substring.split(" ")[1];
                } else if (user.contains("safari") && user.contains("version")) {
                    browser = (userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0]).split("/")[0]
                            + "-" + (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];
                } else if (user.contains("opr") || user.contains("opera")) {
                    if (user.contains("opera")) {
                        browser = (userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0]).split("/")[0]
                                + "-" + (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0])