为了账号安全,请及时绑定邮箱和手机立即绑定

如何获取远程IP地址如180.171.121.32

如何获取远程IP地址如180.171.121.32

car 2017-10-29 12:45:55
    private static String getRemoteIp(HttpServletRequest request) {         //x-forwarded-for:代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP代理或者负载均衡服务器时才会添加该项         String ip = request.getHeader("x-forwarded-for");         //Proxy-Client-IP和WL-Proxy-Client-IP: 只有在Apache(Weblogic Plug-In Enable)+WebLogic搭配下出现,其中“WL”就是WebLogic的缩写         //访问路径是:Client -> Apache WebServer + Weblogic http plugin -> Weblogic Instances         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();         } //        ip = "61.51.253.90"; //        ip = "218.25.19.153";         //0:0:0:0:0:0:0:1: IPV6的形式,win7下可能会出现         //获取远程IP地址           return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;     }这段代码只能返回0:0:0:0:0:0:0:1
查看完整描述

2 回答

已采纳
?
逆光之羽

TA贡献55条经验 获得超13个赞


ip是环回地址不是因为项目是在本机启动,然后又是本机去调用对应接口造成的么?

查看完整回答
反对 回复 2017-10-30
  • car
    car
    意思是项目要在远程启动,才会真正的获得正确IP地址
  • 逆光之羽
    逆光之羽
    其实我也没试过,感觉应该是这个问题,代码本身好像没问题,主要是没地方挂项目上去的话不好测试...
?
言曌博客liuyanzhao_com

TA贡献164条经验 获得超117个赞

//获得物理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(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){
            //根据网卡取本机配置的IP
            InetAddress inet=null;
            try {
                inet = InetAddress.getLocalHost();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
            ipAddress= inet.getHostAddress();
        }
    }
    //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
    if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15
        if(ipAddress.indexOf(",")>0){
            ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
        }
    }
    return ipAddress;
}


查看完整回答
反对 回复 2017-10-30
  • 2 回答
  • 0 关注
  • 1850 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信