zoukankan      html  css  js  c++  java
  • 获取请求的ip工具类

    package com.example.util;

    import javax.servlet.http.HttpServletRequest;

    /**
    * get remote msg
    * 获取访问的ip地址
    */
    public class RequestMsgUtils {

    /**
    * get remote ip address
    * @param request
    * @return
    */
    public static String getRemoteIP(HttpServletRequest request){
    String ip = request.getHeader("x-forwarded-for");
    if (ip == null || ip.length() == 0 ||"unknown".equalsIgnoreCase(ip)) {
    ip = request.getHeader("Proxy-Client-IP");
    }
    if (ip == null || ip.length() == 0 ||"unknown".equalsIgnoreCase(ip)) {
    ip = request.getHeader("WL-Proxy-Client-IP");
    }
    if (ip == null || ip.length() == 0 ||"unknown".equalsIgnoreCase(ip)) {
    ip = request.getRemoteAddr();
    }
    if (ip == null || ip.length() == 0 ||"unknown".equalsIgnoreCase(ip)) {
    ip = request.getHeader("http_client_ip");
    }
    if (ip == null || ip.length() == 0 ||"unknown".equalsIgnoreCase(ip)) {
    ip = request.getHeader("HTTP_X_FORWARDED_FOR");
    }
    // 如果是多级代理,那么取第一个ip为客户ip
    if (ip != null && ip.contains(",")) {
    ip = ip.substring(ip.lastIndexOf(",") + 1, ip.length()).trim();
    }
    return ip;
    }


    public static 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===========================
    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]).split("/")[1];
    }else if(user.contains("opr")){
    browser=((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0]).replace("/", "-"))
    .replace("OPR", "Opera");
    }

    } else if (user.contains("chrome")) {
    browser=(userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-");
    } else if ((user.contains("mozilla/7.0")) || (user.contains("netscape6")) ||
    (user.contains("mozilla/4.7")) || (user.contains("mozilla/4.78")) ||
    (user.contains("mozilla/4.08")) || (user.contains("mozilla/3")) ) {
    browser = "Netscape-?";

    } else if (user.contains("firefox")) {
    browser=(userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-");
    } else if(user.contains("rv")) {
    String IEVersion = (userAgent.substring(userAgent.indexOf("rv")).split(" ")[0]).replace("rv:", "-");
    browser="IE" + IEVersion.substring(0,IEVersion.length() - 1);
    } else {
    browser = "UnKnown, More-Info: "+userAgent;
    }
    return os +" --- "+ browser ;
    }
    }
  • 相关阅读:
    PHP开发经常遇到的几个错误
    PHP的Trait
    PHP反射API
    php split 和 explode 的区别
    php判断检测一个数组里有没有重复的值
    PHP serialize 和 JSON 解析与区别
    php 单文件上传
    php 数组 类对象 值传递 引用传递 区别
    六. 网络编程(解决黏包TCP)
    五. 网络编程(UDP 不黏包)
  • 原文地址:https://www.cnblogs.com/ming-blogs/p/10769500.html
Copyright © 2011-2022 走看看